gpt4 book ai didi

python - Django:如何使用过滤的 ForeignKey 字段的计数来注释查询集?

转载 作者:IT老高 更新时间:2023-10-28 21:55:07 26 4
gpt4 key购买 nike

Django新手问题:)

我有以下模型 - 每个评论都是针对一个产品,每个产品都有一个部门:

class Department(models.Model):
code = models.CharField(max_length=16)
class Product(models.Model):
id = models.CharField(max_length=40, primary_key=True, db_index=True)
dept = models.ForeignKey(Department, null=True, blank=True, db_index=True)
class Review(models.Model):
review_id = models.CharField(max_length=32, primary_key=True, db_index=True)
product = models.ForeignKey(Product, db_index=True)
time = models.DateTimeField(db_index=True)

我想对日期范围(2012-01-01 到 2012-01-08)进行 Django 查询,并返回所有部门的列表,并带有部门 ID 以及该部门的产品数量在该日期范围内进行了审查。

这让我有点头疼:)

我可以获得一个时间范围内的所有评论:

 reviews = Review.filter(time__range=["2012-01-01", "2012-01-08"])

那么我猜每个评论都有一个产品字段,每个产品都有一个部门代码。但是如何按产品和代码、计数和部门 ID 对它们进行分组?

或者,最好请求部门,然后以某种方式用产品数量注释它们?

最佳答案

尽可能避免使用 extrarawaggregation docs几乎有这个用例:

直接来自文档:

# Each publisher, each with a count of books as a "num_books" attribute.
>>> from django.db.models import Count
>>> pubs = Publisher.objects.annotate(num_books=Count('book'))
>>> pubs
[<Publisher BaloneyPress>, <Publisher SalamiPress>, ...]
>>> pubs[0].num_books
73

所以,要针对您的特定示例进行修改:

depts = Department.objects.
filter(product__review__time__range=["2012-01-01", "2012-01-08"]).
annotate(num_products=Count('product'))

在单独的行中调用函数只是为了便于阅读,您应该相应地移动它们。我没有对此进行测试,但我认为它应该可以工作。

关于python - Django:如何使用过滤的 ForeignKey 字段的计数来注释查询集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11418522/

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