Django ForeignKey数据分组

时间:2018-10-11 05:25:10

标签: django

Django ForeignKey需要分组

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',)

我想列出所有记者的名单,并列出以下格式的所有文章。怎么可能?

-------------------------------
Reporter Name |  Total Article
-------------------------------
Reporter 1    |   3
-------------------------------
Reporter 2    |   4
-------------------------------

1 个答案:

答案 0 :(得分:1)

如果您想列出所有报告者,则可以使用Reporter.objects.all(),它将返回一个所有报告者的查询集,为了获取其中的文章,请使用反向关系,即- reporter_object.article_set,因为您没有定义任何相关名称。参见this

我可以举一个简单的示例,说明如何打印所有记者及其文章-

for reporter in Reporter.objects.all():
    print(reporter)
    for article in reporter.article_set.all():
        print(article)

定义外键关系时,将在Reporter和Article之间创建一对多关系,另外在Reporter中添加了另一个属性,默认情况下,它是带有后缀_set的模型名称,即article_set但是,当您指定related_name时,它将与您的related_name相同,现在您可以轻松地通过与Reporter对象相关的名称来调用文章。

仍然对此有任何疑问。