Django - создание моделей с виртуальными полями?
Я хотел бы спросить о самом элегантном подходе к разработке моделей с виртуальными полями, например, как показано ниже в Django ...
Допустим, мы создаем интернет-магазин, и все продукты в системе определяются моделью Продукт ».
class Product(models.Model):
# common fields that all products share
name = ...
brand = ...
price = ...
Но в магазине будет много типов продуктов, совершенно не связанных друг с другом, поэтому мне нужен какой-то способ хранить эти виртуальные поля с разными типами продуктов (например, емкость MP3-плеера, количество страниц книги и т. Д.).
Решения, которые я мог бы придумать с помощью моих сырых навыков Django, пока далеки от совершенства:
Имея свойство custom_fields и промежуточные таблицы, которыми я управляю вручную. (кричит мне в лицо :))
Или наследование классов от Product » на лету с помощью опасных операторов Python exec-eval (это слишком много магии вуду для обслуживания, а также для реализации потребуется знание внутреннего устройства Django).
Что ты думаешь об этом?
TIA.
Ответов (4)4
У продуктов есть особенности.
class Feature( models.Model ):
feature_name = models.CharField( max_length=128 )
feature_value = models.TextField()
part_of = models.ForeignKey( Product )
Как это.
Просто список возможностей.
p= Product( "iPhone", "Apple", 350 )
p.save()
f= Feature( "mp3 capacity", "16Gb", p )
f.save()
При желании вы можете иметь общий список имен функций в отдельной таблице. Не переоценивайте особенности. Вы не можете обрабатывать их. Все, что вы делаете, - это их представляете.
Ruby on Rails имеет «сериализованное» поле, которое позволяет вам упаковать словарь в текстовое поле. Может быть, DJango предлагает нечто подобное?
В этой статье есть реализация SerializedDataField.
Лично я бы согласился с ответом С. Лотта. Однако вы можете создать собственное поле JSON:
http://svn.navi.cx/misc/trunk/djblets/djblets/util/fields.py