3
我需要實現一個相當標準的實體屬性值層次結構。有多種類型的設備,每種類型都有一系列的設置,每個設備都有一組特定的值。似乎django-eav和eav-django包都不再維護,所以我想我需要自己推出。但我如何設計這個?到目前爲止,我在想這樣的事情(跳過很多細節)如何在Django中實現EAV
class DeviceType(Model): name = CharField() class Device(Model): name = CharField() type = ForeignKey(DeviceType) class Setting(Model): name = CharField() type = CharField(choices=(('Number', 'int'), ('String', 'str'), ('Boolean', 'bool'))) device_type = ForeignKey(DeviceType) class Value(Model): device = ForeignKey(Device) setting = ForeignKey(Setting) value = CharField() def __setattr__(self, name, value): if name == 'value': ... do validation based on the setting type ... def __getattr__(self, name): if name == 'value': ... convert string to whatever is the correct value for the type ...
我錯過了什麼嗎?有沒有更好的方法來做到這一點?這會工作嗎?
首先,您可能會注意到這個問題是在四月份提出的。之後我實現了我在問題中發佈的代碼版本。儘管我寧願有一個更易於管理的解決方案,但它對我來說工作起來相當不錯。其次,你的答案是非常通用的。你甚至知道Django? –
有沒有機會使用django-eav?過濾根本不起作用。 – iMitwe
@iMitwe不,當我尋找這個答案時,django-eav幾乎死在水中,所以我根據上面的代碼推出了一個有限版本。 –