ZANIN блог
Контакты
Крути вниз
Фильтр по:
//Post title

Django - связь один ко многим и model enum field

06 Июл 2021Категория : Django

Django - связь один ко многим и model enum field

Эта статья использует в основе пример моделей из прошлой статьи про разделение файла models.py на отдельные файлы.

У меня реализованы две модели: SofaModel и CategoryModel. По логике мы с вами понимаем, что в одной категории может быть много товаров и товар может быть в нескольких категориях одновременно. Но у меня пока пример такой, что в категории может быть много товаров, а товар может быть только в одной категории. Такая связь называется "один со многими". В данном примере первичной моделью является CategoryModel, а вторичной моделью SofaModel. Для реализации такой связи в Django используется ForeignKey и объявляется он в классе вторичной модели.

При объявлении такой связи между моделями есть несколько нюансов. Если первичная модель находиться перед вторичной (то есть в файле models.py сначала идет CategoryModel, а потом SofaModel), то объявление создается таким образом.

Django связь один ко многим

Если же класс вторичной модели находиться перед классом первичной модели, то связь осуществляется таким образом.

Django связь один ко многим

Если ссылка на первичную модель осуществляется в другое приложение, тогда это делается так.

Django связь один ко многим

В моем конкретном примере, когда models.py разбит на несколько разных файлов.

Django связь один ко многим

Связь осуществляется таким способом.

Django связь один ко многим

Теперь покажу интересный пример при использовании Field.choices или если вам проще понять, то тип Enum. Допустим CategoryModel может быть активной, в черновиках и удаленной. Если у категории будет статус "удалена", то нам надо ограничить выбор ее в админке у товара. Это делается при помощи limit_choices_to.

Модель CategoryModel выглядит так.

Django связь один ко многим

А уже в модели SofaModel мы используем фильтр при помощи параметра limit_choices_to. В данном случае в выборе участвуют записи со статусом Active (a).

Django связь один ко многим

В самой SofaModel тип enum реализован по новому.

Django связь один ко многим

В админке это выглядит так.

Django связь один ко многим

Django связь один ко многим

  • 687

01. Об авторе

Александр Занин

Занимаюсь разработкой на Django,
а также бэкенд разработкой на PHP (Laravel, Slim).

Find on :

02. Свежие статьи

Готовы заказать проект?

© ZANIN 2019 / All rights reserved.
Контакты
Close