Как связать две переменные БД вместе - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь придумать правильный способ реализации этой схемы.

У меня есть музыкальное произведение с предопределенным инструментарием.Например, Бетховен написал фортепианное трио.Инструментарий состоит из 3 инструментов: 1 фортепиано, 1 скрипка и 1 виолончель.

class Work_Music(MPTTModel, Work):
    composer = models.ForeignKey(Composer, verbose_name=_('composer'), null=True, blank=True, on_delete=models.PROTECT)
    key = models.CharField(max_length=10, null=True, blank=True)
    tonality = models.CharField(max_length=20, null=True, blank=True)
    instrumentation = models.ForeignKey(Instrumentation, verbose_name=_('instrumentation'), null=True, blank=True, on_delete=models.PROTECT)

class Instrumentation(models.Model):
    name = models.CharField(max_length=100, null=True, blank=True)
    category = models.CharField(max_length=100, null=True, blank=True)

class Instrument(MPTTModel):
    name = models.CharField(max_length=100, null=True, blank=True)
    category = models.CharField(max_length=100, null=True, blank=True)
    instrumentation = models.ManyToManyField(Instrumentation, verbose_name=_('instrumentation'), related_name='instrument', blank=True)
    player_name = models.CharField(max_length=100, null=True, blank=True)

Отдельно у меня есть модель исполнения.На высоком уровне я думаю, что Перформанс - это «образец» музыкального произведения.Можно было бы ожидать, что будут выступать 1 пианист, 1 альтист и 1 виолончелист.

class Performance(Event):
    work = models.ManyToManyField(Work_Music, verbose_name=_('work'), blank=True)
    players = models.ManyToManyField(Ensemble, verbose_name=_('players'), blank=True) //Ensemble is just multiple players

Каков наилучший способ параллельного соединения двух моделей?Проблема здесь состоит в том, что инструменты для каждой части могут отличаться.Как мне создать admin.py, чтобы я мог легко выбрать пианиста для ссылки на роль пианино.

Work_Music (model)               link to  Performance (model)
piece                              ->     name of performance
instrumentation.ensemble.piano     ->     pianist
instrumentation.ensemble.violin    ->     violist
instrumentation.ensemble.cello     ->     cellist
...