我正在为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"
有没有简单的方法可以做到这一点,还是我做错了方法?
一种实现方法是制作第四个模型:DeviceAttribute
。
每个设备都有一个名称,并且具有零个或多个DeviceAttribute
。
ADeviceAttribute
有两个字段:key
和value
。
另外,您可以使用建议的JSON,但无法对其进行查询或更新。这有点反模式。
更新:如果您有Device
s的多个“类” ,则可以通过对模型进行子类化来实现类型安全,而不是具有任意属性。
它创建了一个OneToOneField
与DeviceSubclassA
和Device
之间,以及DeviceSubclassB
和Device
。
您可以向添加特定字段DeviceSubclassA
,也可以向添加其他字段DeviceSubclassB
。commonname
属性在Device
父模型上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句