【问题标题】:Django Aggregate ManyToMany fieldsDjango 聚合多对多字段
【发布时间】:2016-09-29 21:08:55
【问题描述】:

假设我有这样的 Django 模型:

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    authors = models.ManyToManyField(Author)

在一个或两个查询中获取每个作者创建(最好是排序)的书籍数量的最佳方法是什么?

作者集可能会变得非常大,所以我正在寻找一种方法来避免对所有内容进行迭代。

【问题讨论】:

    标签: python django many-to-many


    【解决方案1】:

    在您的模型书中添加...

    ...
    author = models.ForeignKey(Author)
    ...
    

    然后你使用类似的查询集

    ...
    Author.objects.get(id=some_id).book_set.all() # this line, return all book of these author, if you want get the number just add at end '.count()'
    ...
    

    【讨论】:

    • 你不是在回答问题——你是在改变他的模型。
    • 是一样的...你可以对你的关系模型做同样的事情,重要的是...book_set.all()
    • 确实如此,但实际上我希望有一种方法可以在一个(或两个)查询中执行此操作,而不是遍历所有选项,因为作者集可能会变得非常大。我会澄清我的问题。谢谢!
    • 如果要在作者的查询集中获取,必须使用Author.objects.filter(some_field=some_value).aggregate(num_books=models.Sum('book')),那么每个作者都有一个属性'num_books',或者直接按'num_books'过滤
    猜你喜欢
    • 2021-06-23
    • 2020-02-18
    • 2010-12-20
    • 2021-03-04
    • 2019-05-18
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多