将自定义选择字段添加到Django查询

时间:2015-02-24 23:24:20

标签: django

我有一份工作数据库表,其中一些已经付款,有些则没有。付款在另一个表中表示为行,其中外键引用了作业表。我希望作业结果集中的一个字段指示是否存在付款(" is_paid")。

到目前为止,我一直在进行Job.objects.annotate(num_payments=Count('payment')),然后使用num_payments > 0作为我的布尔支付指标。然而,这感觉就像一个黑客。另一种方法是使用extra(),但使用它时似乎失去了一些灵活性和可移植性。

这样做的正确方法是什么?

1 个答案:

答案 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" }}
相关问题