gpt4 book ai didi

django - 多对多关系以及有关该关系的其他数据

转载 作者:行者123 更新时间:2023-12-03 14:02:30 25 4
gpt4 key购买 nike

我正在尝试创建一个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()实例并显式搜索关系表来手动管理关系?
注意我目前正在使用Django 1.0

最佳答案

我建议您查看Django documentation中的“多对多关系中的额外字段”部分-它完全涵盖了您的问题。

1:是的,创建中介模型是必经之路。

2:从文档中:“与普通的多对多字段不同,您不能使用添加,创建或分配来创建关系”-而是,要从中间模型中添加艺术家到发行,请执行以下操作:

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)

关于django - 多对多关系以及有关该关系的其他数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1755591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com