Найти - Пользователи
Полная версия: Как правильно добавить большое количество атрибутов к объекту модели?
Начало » Django » Как правильно добавить большое количество атрибутов к объекту модели?
1
MikaMika
Привет.
Ребята подскажите как правильнее решить следующую задачу.
Есть объект, пусть это будет камень.
Объект представлен классом модели:
class Stone(models.Model):
    name = models.CharField()
У этого объекта есть множество атрибутов: цвет, форма, размер, вес и т.д.
Эти атрибуты почти никогда не меняются!
Самое простое, что можно сделать это несколько классов: Color, StoneForm, Size и т.д., описать значение атрибутов в них, а в классе Stone поставить ForeingKey() на нужные классы.
Но я хотел бы сохранить в модели нечто такое:
{
'colors': ['red', 'green', 'blue'],
'stone_form':['round', 'square', 'convex'],
'size': ['small', 'medium', 'large']
}
Создать словарь, записать в него необходимые атрибуты и значения и записать в поле модели.
Хотел бы узнать, что для этого лучше использовать?
Встроенный pickle или jsonField?
А если jsonField, то где лучше скачать или писать самому?
Или всё же оставить вариант с классами модели, ведь у него тоже есть свои преимущества.
alafin
MikaMika, все зависит от задачи и как в будущем планируется использовать данный функционал.

1) Если все будете хранить в таблицах (Color, StoneForm, Size):
Плюсы: сможете нормально фильтровать записи (если вам конечно это нужно будет для задачи)
Минусы: Нужно создавать для задачи дополнительные таблицы (Color, StoneForm, Size)
2) Если будете хранить записи в JSONField-е (на основе TextField-а)
Плюсы: колонки в таблице будут храниться в читабельном виде (JSON)
Минусы: невозможно будет нормально фильтровать в запросах записи
3) Если будете хранить записи в PickleField:
Плюсы: вменяемых плюсов не знаю :)
Минусы: нечитабельный вид хранения в базе
4) В Postgres-е в версии 9.2 появился JSONField можно взглянуть и на него.

Приложения для JSONField-а:
https://pypi.python.org/pypi/django-jsonfield
https://github.com/bradjasper/django-jsonfield
https://github.com/derek-schaefer/django-json-field
MikaMika
alafin, спасибо.
Открыл для себя “django-annoying”, с его полем JSONField.
Его и использовал.
Griffon
А чем плох Field.choices?
MikaMika
Griffon, у меня у каждого объекта порядка 40 - 50 атрибутов.
C Field.choices мне нужно делать 40 - 50 полей в модели?
FishHook
MikaMika
Griffon, у меня у каждого объекта порядка 40 - 50 атрибутов.C Field.choices мне нужно делать 40 - 50 полей в модели?
Может как то так?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB