【问题标题】:Django ForeignKey data groupingDjango ForeignKey 数据分组
【发布时间】:2019-03-16 02:32:30
【问题描述】:

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
-------------------------------

【问题讨论】:

  • 有充足的文档和许多关于如何做到这一点的教程。你做过什么研究?
  • 我尝试了很多文档。是否需要多次附加到 Reporter 才能获取数据?
  • 请检查更新的问题

标签: django


【解决方案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)

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

还有什么疑问可以评论一下。

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    相关资源
    最近更新 更多