我试图创建一个django数据库,记录我所有的漫画购买,我遇到了一些问题。我试图模拟漫画问题与处理它的艺术家之间的关系。与关系的其他数据的多对多关系
一个漫画的问题有一个或多个艺术家在这个问题上工作,一个艺术家将在多个单一问题上工作。此外,艺术家在漫画创作者(所有关于该问题的工作),作家(写作剧本),抽屉(绘制完整漫画),铅笔,油墨,颜色或文本等方面发挥作用。在某个角色中可能会有几位艺术家。
这给了我一个数据库模型,如:
然后我翻译成以下的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,目前
该链接正是我正在寻找和未找到。我想我需要看看我的搜索技能。 – 2009-11-19 09:43:00
这是Django真正的'波涛汹涌的大海'。错误消息是误导性的,添加/创建方法确实应该按预期工作。谢谢发布这个答案。 – Rich 2011-02-16 11:43:02
只是指出如果您使用create()方法,则不需要a.save()。 https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.create – 2012-09-27 06:48:48