我有一份工作数据库表,其中一些已经付款,有些则没有。付款在另一个表中表示为行,其中外键引用了作业表。我希望作业结果集中的一个字段指示是否存在付款(" is_paid
")。
到目前为止,我一直在进行Job.objects.annotate(num_payments=Count('payment'))
,然后使用num_payments > 0
作为我的布尔支付指标。然而,这感觉就像一个黑客。另一种方法是使用extra()
,但使用它时似乎失去了一些灵活性和可移植性。
这样做的正确方法是什么?
答案 0 :(得分:3)
你做对了,我觉得它不像黑客。如果不在extra()
中使用SQL,这是最有效的方法。建议的唯一方法是将字段命名为is_paid
而不是num_payments
:
Job.objects.annotate(is_paid=Count('payment'))
布尔上下文中的 0
计数为False
,因此您可以在if
语句中安全地使用它,如:
if job.is_paid:
...
或者,在模板中:
{{ job.is_paid|yesno:"PAID" }}