django - Django 中可选嵌套模型的方法

标签 django database nested inventory

我正在为我的公司创建一个简单的内部 Assets 跟踪应用程序。目前我们通过 excel(糟糕)来做到这一点。我将其分解为:

Assets /项目 - 工具、硬件、零件等。 站点 - 总体位置:设施 A,站点位置 B Bin - Assets 所在的子位置,可以是建筑物、工具箱、 crate 。

Bin 给我带来了问题,因为一个项目可以位于没有 Bin 的站点上,或者一个 Bin 可以位于另一个 Bin 内,我还不确定构建此数据库的最佳方式。

我曾尝试过使用多个外键,但这样会变得困惑或至少感觉如此。我也尝试使用 Django 的 GenericForeign Keys 的替代品,如 here 所列我之前曾将它们与略有不同的应用程序一起使用过,但 self 引用让我感到困惑。最后,我希望能够在一个站点上收集一个项目列表,然后为每个工具箱和其中的项目设置缩进线,是否有一种设置模型的好方法可以实现这一点?

最佳答案

您可能需要考虑两个观点:1. 模型是否易于阅读、无冗余且与您的问题一致,2. 您打算在模型上运行什么样的查询。

第一方面你已经想到了。关于第二个,我相信您要执行的一些查询是: 1. 列出 Assets 并链接它们的位置。 2. 统计一个地点的 Assets 3. 导航位置层次结构并列出每个位置的所有 Assets

上面建议您为包括建筑物、垃圾箱等的位置创建一个模型,并通过字段 location_type 区分它们,该字段可以是字典表(id、名称)的外键。那么您将需要一个自引用的 foreign_key 到父位置,以创建层次结构。

通过这种方式,您将拥有指向 Assets 位置的单个外键,并且在给定位置后您可以直接查询 asset_set。任何其他模型都不太透明。可以使用 @property 方法解决任何差异,例如要保存特定于构建的字段,您可以创建一个方法,首先检查类型是否正确,然后将值保存到动态字段中,如 char_field_1

上述的变体。如果BinBuilding等属性太多且不同,无法合并到一个表中。然后,您可以为每个模型创建单独的模型,并从 Location 到每个模型都有一个可为 null 的一对一字段。保存时,您可以检查是否填充了超过一个。

关于django - Django 中可选嵌套模型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112772/

相关文章:

python - 如何获取从 smtplib 发送的电子邮件的消息 ID

python - 如何在 django 中设置 "context"类型对象

python - 将 "django-admin.py"路径添加到 Windows 7 上的命令行

python - django 标记 - 按标记过滤

mysql - 过滤连接结果

javascript - 嵌套 Node async.eachSeries

php - 所有查询都是大写的,带有 oracle 驱动程序和 laravel 查询生成器

.net - 如何使用安装程序分发 mdb 文件?

python - 从文件中提取数据,处理然后下一行

c++ - C++中嵌套结构的 friend