我正在为 Django 应用程序设计模型,但我不太清楚如何解决问题。
我有 3 个模型。 服务器、模块和设备。
Server 是模块可以运行的服务器。 模块 在服务器上运行,并包含设备。
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 .
每个设备都有一个名称,并且有零个或多个
DeviceAttributeA
DeviceAttribute有两个字段:key和value.
或者,您可以使用建议的 JSON,但您将无法查询或更新它。这有点反模式。
更新:如果您有多个 Device 的“类” s,那么您可以通过对模型进行子类化来实现类型安全,而不是拥有任意属性。
有several ways去做这个。我经常使用 multi-table方法。
它创建一个 OneToOneField在 DeviceSubclassA 之间和 Device , 和 DeviceSubclassB 之间和 Device .
您可以将某些字段添加到 DeviceSubclassA , 和不同的字段 DeviceSubclassB .常见的name属性在 Device 上父模型。
