Подтвердить что ты не робот

От многих до многих отношений с дополнительными данными о взаимосвязи

Я пытаюсь создать базу данных django, которая записывает все мои комические покупки, и я ударил несколько проблем. Я пытаюсь моделировать отношения между комической проблемой и художниками, которые работают над ней.

В комической проблеме есть один или несколько художников, работающих над этой проблемой, и художник будет работать над более чем одной проблемой. Кроме того, у исполнителя есть роль, связанная с тем, что они сделали с создателем комикса (вся работа над этим вопросом), писателем (написала script), ящиком (нарисовал полный комикс), карандаши, чернила, цвета или текст, и в данной роли может быть несколько исполнителей.

Это дает мне модель базы данных, например: Database model

Затем переведите это в следующую модель Django. Поскольку мне требуются дополнительные данные об отношениях, я считаю, что для обработки отношений я должен использовать отдельный класс и удерживать дополнительные

class Artist(models.Model):
    name = models.CharField(max_length = 100)

    def __unicode__(self):
        return self.name

class ComicIssue(models.Model):
    issue_number = models.IntegerField()
    title = models.TextField()
    artists = models.ManyToManyField(Artist, through='IssueArtist')

    def __unicode__(self):
        return u'issue = %s, %s' % (self.issue_number, self.title)

class IssueArtist(models.Model):
    roles = ( (0, "--------"),
              (1, "Creator"),
              (2, "Writer"),
              (3, "Drawer"),
              (4, "Pencils"),
              (5, "Inks"),
              (6, "Colours"),
              (7, "Text"),
            )
    artist = models.ForeignKey(Artist)
    issue = models.ForeignKey(ComicIssue)
    role = models.IntegerField(choices = roles)

Мои вопросы:

1) Кажется ли это правильным способом моделирования этого?

2) Если я не использую функцию through='IssueArtist', я могу добавить отношения, используя функцию artists.add(). Если я использую это, я получаю сообщение об ошибке 'ManyRelatedManager' object has no attribute 'add'. Должен ли я вручную управлять отношениями, создавая экземпляры IssueArtist() и явно просматривая таблицу отношений? NB. Я использую Django 1.0, в настоящий момент

4b9b3361

Ответ 1

Я рекомендую вам ознакомиться с разделом "ДОПОЛНИТЕЛЬНЫЕ ПОЛЯ ПО МНОГИМ И МНОГИМ ОТНОШЕНИЯМ" в документации Django - он охватывает именно ваши вопрос.

1: да, создание промежуточной модели - это путь.

2: Из документации: "В отличие от обычных полей" много-ко-многим "вы не можете использовать add, create или assign для создания отношений". Вместо этого, для добавления Artist в проблему, сделайте это из промежуточной модели:

some_artist = Artist.objects.get(name='some name')
some_issue = Issue.objects.get(tile='some tite')
IssueArtist.objects.create(artist= some_artist, issue = some_issue, role=1)