Ron*_*ess 6 python django django-models django-filter django-annotate
我有一个名为'StoreItem'的模型和一个名为'QuoteItem'的模型.QuoteItem指向StoreItem.
我正在尝试注释一个计数器,该计数器指出商店项目上有多少引用项目,但是条件适用于报价项目.
我试过这样的事情:
items = items.annotate(
quote_count=Count(
Case(
When(quoteitem__lookup_date__in=this_week, then=1),
output_field=IntegerField()
)
)
)
Run Code Online (Sandbox Code Playgroud)
'items'是StoreItems的查询集.'this_week'是代表本周的日期列表(这是我尝试应用的过滤器).在我使日期工作之后,我想为这个条件计数添加更多过滤器,但让我们开始吧.
无论如何我得到的更像是一个布尔值 - 如果符合条件的引用项存在,无论我有多少,计数器将是1.否则,将为0.
它看起来是Count(Case())唯一检查是否存在任何项目,如果存在则返回1,而我希望它迭代指向商店项目的所有报价项目并计算它们,如果它们与条件匹配(单独).
我该如何实现?
sol*_*oke 10
你需要将所有内容包装在一个Sum语句中而不是Count(我发现它有点奇怪,Count完全有效):
from django.db.models import Case, IntegerField, Sum, When
items = items.annotate(
quote_count=Sum(
Case(
When(quoteitem__lookup_date__in=this_week, then=1),
output_field=IntegerField()
)
)
)
Run Code Online (Sandbox Code Playgroud)
这基本上将内部语句的所有0s和1s 相加Case,从而计算出匹配数.
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |