Мне нужно реализовать довольно стандартную иерархию сущностей-атрибутов. Существуют устройства нескольких типов, каждый тип имеет множество настроек, которые он может иметь, каждое отдельное устройство имеет набор конкретных значений для каждого параметра. Похоже, что пакеты django-eav и eav-django больше не поддерживаются, поэтому, я думаю, мне нужно сворачивать самостоятельно. Но как мне это сделать? До сих пор я думаю о чем-то подобном (пропуская много деталей)Как реализовать EAV в Django
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-eav? Фильтрация для меня совсем не работает. – iMitwe
@iMitwe no, когда я искал этот ответ, django-eav был в значительной степени мертв в воде, поэтому я просмотрел ограниченную версию, основанную на коде выше. –