@NerVik

Как правильнее организовать модели?

Здравствуйте, есть примерно такие модели:

LANG = (
    ('unknown', _('Unknown')),
    ('abk', _('Abkhazian')),
    ('ace', _('Achinese')),
    ('ach', _('Acoli')),
    ('eng', _('English')),
    ('rus', _('Russian'))
...
)

class Edition(models.Model):
    name = models.CharField(max_length=200)
    description = models.TextField(blank=True)
    lang  = models.IntegerField(choices=LANG)
    book = models.ForeignKey('Book')

class Book(models.Model):
    pass


в базе есть допустим 1 книга и 10 изданий ссылающихся на неё, языки у изданий eng, eng, rus. abk, ace, rus, eng, ace, unknown, eng.

задача: При просмотре книги выводить описание на английском языке и языке пользователя, пусть это будет русский.

проблема: изданий на одном и том же языке может быть несколько(в примере rus, eng, ace и описания пусть и на одном языке незначительно отличаются. Разницы какой из них выводить нет, но все же не хотелось бы что бы при обновлении страницы вдруг появилось другое описание.

Единственное приходящее в мою голову решение вынести descriotion в отдельную модель и из Edition сделать на неё fk. но непонятно насколько это правильно. Зато в таком случае избавляюсь от, по сути, дублирующейся информации в виде множества почти одинаковых описаний.

Но быть может есть способ правильнее/проще/удобнее?
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
sim3x
@sim3x
В зависимости от того как связано издание и его описание

Логичнее, что на каждое издание свое описание
Те делать отдельную модель для описаний не стоит
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Хранить пары язык-описание в jsonfield или в hstore, правда придется поработать над админкой. Проще и удобнее, действительно, хранить в отдельной модели
Ответ написан
Комментировать
p00h
@p00h
Фехтовальщик-стропальщик
Единственное приходящее в мою голову решение вынести descriotion в отдельную модель и из Edition сделать на неё fk

Единственное разумное решение здесь на мой взгляд
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы