Django中的依赖字段

时间:2014-01-12 01:32:39

标签: python django

我正在为Django应用设计模型,我无法解决如何处理问题。

我有3个型号。 ServerModuleDevice

Server是模块可以运行的服务器。 Module在服务器上运行,包含设备。

Devices的问题是名称始终是字段,但属性可能会更改。

我考虑在属性中添加JSON值,但我无法弄清楚如何使用Django admin。

基本上,用户将输入设备的名称,并根据其附加的模块,显示要填写的各种不同字段。

例如:

module rfm_ninjablock:
Device fields would be "name" and "code"

module LimitlessLED
Device fields would be "name", "controller", "group" and "LightID"

有没有直接的方法可以做到这一点,还是我错误的方式?

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是制作第四个模型:DeviceAttribute

  • 每个设备都有一个名称,并且零个或多个DeviceAttribute s。

  • DeviceAttribute有两个字段:keyvalue

或者,您可以使用您建议的JSON,但您无法查询或轻松更新它。这有点像反模式。

更新:如果你有几个Device的“类”,那么你可以通过子类化模型来实现类型安全,而不是拥有任意属性。

several ways这样做。我经常使用multi-table方法。

它会在OneToOneFieldDeviceSubclassA之间以及DeviceDeviceSubclassB之间创建Device

您可以将某些字段添加到DeviceSubclassA,将不同字段添加到DeviceSubclassB。常见的name属性位于Device父模型上。