Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как правильно добавить большое количество атрибутов к объекту модели? [RSS Feed]

#1 Март 9, 2013 20:24:28

MikaMika
Зарегистрирован: 2012-11-07
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно добавить большое количество атрибутов к объекту модели?

Привет.
Ребята подскажите как правильнее решить следующую задачу.
Есть объект, пусть это будет камень.
Объект представлен классом модели:

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, то где лучше скачать или писать самому?
Или всё же оставить вариант с классами модели, ведь у него тоже есть свои преимущества.

Отредактировано MikaMika (Март 9, 2013 20:25:29)

Офлайн

#2 Март 10, 2013 17:13:28

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Как правильно добавить большое количество атрибутов к объекту модели?

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



Офлайн

#3 Март 11, 2013 11:37:47

MikaMika
Зарегистрирован: 2012-11-07
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно добавить большое количество атрибутов к объекту модели?

alafin, спасибо.
Открыл для себя “django-annoying”, с его полем JSONField.
Его и использовал.

Офлайн

#4 Март 11, 2013 14:00:34

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Как правильно добавить большое количество атрибутов к объекту модели?

А чем плох Field.choices?



Офлайн

#5 Март 12, 2013 12:50:46

MikaMika
Зарегистрирован: 2012-11-07
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно добавить большое количество атрибутов к объекту модели?

Griffon, у меня у каждого объекта порядка 40 - 50 атрибутов.
C Field.choices мне нужно делать 40 - 50 полей в модели?

Офлайн

#6 Март 12, 2013 14:05:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как правильно добавить большое количество атрибутов к объекту модели?

MikaMika
Griffon, у меня у каждого объекта порядка 40 - 50 атрибутов.C Field.choices мне нужно делать 40 - 50 полей в модели?
Может как то так?



Офлайн

  • Начало
  • » Django
  • » Как правильно добавить большое количество атрибутов к объекту модели?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version