我有一个主要模型:
ToolBox
和其他三个模型:
Hammer
Nail
Plier
显然,工具箱可以包含锤子、钉子或钳子的任意组合。
使用 Django,这种动态关系类型的良好 ORM 表示是什么?请记住,这些模型中的每一个都可以拥有自己丰富的属性集,因此简单的类型字段将无法完成这项工作。我还想知道如果 Django 中的管理界面可以正常工作的话,它是如何适应这种动态类型的东西的。
我有一个主要模型:
ToolBox
和其他三个模型:
Hammer
Nail
Plier
显然,工具箱可以包含锤子、钉子或钳子的任意组合。
使用 Django,这种动态关系类型的良好 ORM 表示是什么?请记住,这些模型中的每一个都可以拥有自己丰富的属性集,因此简单的类型字段将无法完成这项工作。我还想知道如果 Django 中的管理界面可以正常工作的话,它是如何适应这种动态类型的东西的。
我不确定你所说的动态是什么意思,我认为你的例子很典型。
但无论如何,为了避免这种情况:
Toolbox
many2many(Hammer)
many2many(Nail)
etc... (add new m2m field every time you add another tool class)
我会这样做:
Toolbox
Hammer
foreignkey(Toolbox)
Nail
foreignkey(Toolbox)
这将使事情更容易实现(使用 toolbox.hammer_set 等)。如果 Hammer、Nail 等有一些共同的字段,您还可以定义一个包含所有共同字段的抽象基类(例如 Tool)。