2014-01-12 91 views
2

我正在设计Django应用程序的模型,我无法完全解决如何解决问题。Django中的相关字段

我有3个型号。 Server,ModuleDevice

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

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

我认为只是将JSON的值放在属性中,但我无法弄清楚如何用Django管理员执行此操作。

基本上用户将关于哪个模块被附接到装置和根据输入名称,示出了各种不同的领域,以填补在

,例如:

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

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

是否有一个简单的这样做还是我以错误的方式去做?

回答

1

这样做的一种方法是制作第四个模型:DeviceAttribute

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

  • A DeviceAttribute有两个字段:keyvalue

或者,您可以使用您建议的JSON,但无法在其上查询或更新它。这是一种反模式。

UPDATE:如果您有几个Device s的“类”,那么您可以通过子类化模型来实现类型安全。

several ways要做到这一点。我经常使用multi-table的方法。

它创建了一个OneToOneField之间DeviceSubclassBDevice之间DeviceSubclassADevice,和。

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

+0

感谢您的回答。我当时想到json的原因是我想强制DeviceAttributes对于某些设备类型是某些东西... – PythonLearner

+0

@PythonLearner,请参阅更新答案。 –

+0

谢谢!经过几个小时的调查,我决定在创建设备时使用django信号将空的json对象插入列中,以便它可以完全动态。尽管我会把你的答案作为答案,就好像我不想变得有活力一样,这样做就能完成这项工作! – PythonLearner