Nit*_*hin 2 django postgresql django-queryset
class Forecast(Model):
id = UUID()
type = StringField()
approved = BooleanField()
Run Code Online (Sandbox Code Playgroud)
type我想通过在批准的字段上应用“逻辑与”来对该字段进行分组。假设带注释的字段是all_approved. all_approved如果该类型的所有项目都为 True,则应为 True;如果至少有一项为 False,则应为 false。
所以最后在我的查询集中我想要有两个字段type, all_approved。
我怎样才能做到这一点?
我根据这个答案尝试了一些东西,但什么也没得到。
编辑:
当我尝试该答案中给出的内容时,它没有执行“逻辑与”。相反,对于每个type项目,它只给出两项,一项为all_approvedTrue,另一项all_approved为 False。我想要每个项目一个type。
我也不明白为什么这个答案应该有效。在哪里指定分组时是否应该执行“逻辑与”或“逻辑或”。
小智 7
其他解决方案:您可以尝试将所有approved与approved=True
from django.db.models import Count, Case, When, BooleanField
Forecast.objects.values(
'type'
).annotate(
cnt_app=Count(Case(When(approved=True, then=1)))
).annotate(
all_approved=Case(
When(cnt_app=Count('approved'), then=True),
default=False,
output_field=BooleanField()
)
).values('type', 'all_approved')
Run Code Online (Sandbox Code Playgroud)
在哪里
Count(Case(When(approved=True, then=1)))为我们提供该类型状态为 True 的已批准计数,
Count('approved')给我们该类型的所有总数,
如果值相等,则 all_approved 为 True,否则为 False
| 归档时间: |
|
| 查看次数: |
4962 次 |
| 最近记录: |