Я пытаюсь создать базу данных 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, на данный момент