我正在为Django
应用设计模型,我无法解决如何处理问题。
我有3个型号。 Server
,Module
和Device
。
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"
有没有直接的方法可以做到这一点,还是我错误的方式?
答案 0 :(得分:1)
执行此操作的一种方法是制作第四个模型:DeviceAttribute
。
每个设备都有一个名称,并且零个或多个DeviceAttribute
s。
DeviceAttribute
有两个字段:key
和value
。
或者,您可以使用您建议的JSON,但您无法查询或轻松更新它。这有点像反模式。
更新:如果你有几个Device
的“类”,那么你可以通过子类化模型来实现类型安全,而不是拥有任意属性。
有several ways这样做。我经常使用multi-table方法。
它会在OneToOneField
和DeviceSubclassA
之间以及Device
和DeviceSubclassB
之间创建Device
。
您可以将某些字段添加到DeviceSubclassA
,将不同字段添加到DeviceSubclassB
。常见的name
属性位于Device
父模型上。