from django.db import models
class Reporter(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField()
def __str__(self):
return "%s %s" % (self.first_name, self.last_name)
class Article(models.Model):
headline = models.CharField(max_length=100)
pub_date = models.DateField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
def __str__(self):
return self.headline
class Meta:
ordering = ('headline',)
我在Django文档中发现了这个一对多的关系示例,我将如何进行另一个名为Magazine的类。在课堂杂志中,它将包含许多记者撰写的许多文章。我还会使用多对一关系,还是需要一对一的关系?谢谢,提前获得任何帮助
答案 0 :(得分:1)
这真的取决于你想做什么...... 你必须更具体,并告诉我们你的问题到底是什么。
如果您的杂志中有n篇文章,并且每篇文章都会出现 在一本杂志中,你必须使用一对多。
如果文章可以在多个杂志中出现,则必须使用 多对多的关系。
顺便说一句,这实际上并不是一个蟒蛇问题......
答案 1 :(得分:1)
这是 ForeignKey
从Article
到Magazine
,或 ManyToManyField
在Article
和{之间{1}} 即可。这取决于一篇文章是否可以出现在多个杂志中(记者经常将相同的文章卖给不同的杂志,然后,除了一些格式,逐字逐句)。
如果每篇文章都出现在一个杂志中,那么我们就这样实现:
Magazine
如果文章可以未发布,那么您可能还必须在class Article(models.Model):
headline = models.CharField(max_length=100)
pub_date = models.DateField()
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
magazine = models.ForeignKey(Magazine, on_delete=models.CASCADE)
def __str__(self):
return self.headline
class Meta:
ordering = ('headline',)
构造函数中设置null=True
。
如果是ForeignKey
,django将隐式创建一个类似ManyToManyField
的表,用于存储从article_magazine
到Article
s的映射(但如果您查询,则只能获得Magazine
s。。
关系很可能 Magazine
。事实上,OneToOneField
是OneToOneField
ForeignKey
。这意味着没有两个unique=True
在相同的 Article
中发布。因此,这意味着每个Magazine
都没有或完全一个Magazine
与之相关。
答案 2 :(得分:1)
根据您的需要,我认为您应该参考多对多关系。
您认为,可以使用多个报告对象发布文章,而报告者有多个文章对象,然后参考https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_many/
如果你的Logic每篇文章支持一名记者,每位记者支持多篇文章,请访问: https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_one/