Должен ли я использовать поля «один ко многим ко многим ко многим»? - PullRequest
0 голосов
/ 27 января 2020

У меня есть модель оперы:

class Opera(MPTTModel):
    name = models.CharField(max_length=8000, null=True, blank=True)
    librettist = models.ForeignKey(Person, verbose_name=_('librettist'), null=True, blank=True, related_name='person', on_delete=models.PROTECT)

Структура Оперы - это древовидная структура:

Opera (Top level)
  |--> Overture
  |--> Aria #1
  |--> Aria #2

В каждой опере или арии есть набор символов:

class Cast(models.Model):
    character_name = models.CharField(max_length=100, null=True, blank=True)
    voice_type = models.ForeignKey(Instrument, null=True, blank=True, on_delete=models.CASCADE)

Существует также таблица сопоставления для сопоставления модели Cast с оперой:

class WorkCast(models.Model):
    opera = models.ForeignKey(Opera, verbose_name=_('opera'), related_name='workcast', null=True, blank=True, on_delete=models.PROTECT)
    cast = models.ForeignKey(Cast, verbose_name=_('cast'), related_name='workcast', null=True, blank=True, on_delete=models.PROTECT)

Опера (верхний уровень) имеет весь состав, сопоставленный с ней. Aria # 1 или Aria # 2 будут иметь подмножество карт преобразования.

Когда я нахожусь в меню администратора, я хочу иметь возможность выбрать модель оперы и связать с ней несколько членов актерского состава. Означает ли это, что модели WorkCast необходимо иметь поле «многие ко многим» для преобразования или внешний ключ для преобразования? Кажется, что я должен принудительно установить отношение «многие ко многим», чтобы использовать встроенную функцию в admin.py?

.
...