django: логическое поле, взаимоисключающее между дочерними строками

Первый пост здесь:) Я изучаю Python и фреймворк Django с помощью простого приложения для создания фотоальбомов. Я работаю через админ сайта только сейчас, а django v.2.1.

Там есть фотоальбом и таблица изображений. Фотоальбом может иметь много изображений, и изображение может быть связано со многими фотоальбомами, поэтому я смоделировал отношение "многие ко многим" через промежуточную таблицу.

На странице изменения моего фотоальбома есть встроенные изображения. Все это просто и хорошо работает.

Помимо двух родительских таблиц PK, промежуточная таблица имеет дополнительное логическое поле "isCover", чтобы пользователь мог выбрать изображение в фотоальбоме в качестве обложки. Тем не менее, в строке нет никакого способа принудительно установить только одно изображение, отмеченное как обложка. Кроме того, я хотел бы, чтобы функциональность первого изображения автоматически выбиралась в качестве обложки, если пользователь не выбирает ни одного.

Как это можно сделать?

Заранее спасибо за любые идеи! Джо

1 ответ

Вы можете создать промежуточную таблицу, используя ключевое слово через многие поля

 class Album(models.Model):
     name = models.CharField(max_lenght=100)
 class Image(models.Model):
    image = models.ImageField()
    album = models.ManyToManyFiels(Album, through=AlbumImage)

 class AlbumImage(models.Model):
  image = models.ForeignKey(Image)
  album = models.ForeignKey(Album)
  is_cover = models.BooleanField()
Другие вопросы по тегам