如何比较两个计算的F对象

时间:2016-01-04 22:58:14

标签: django django-queryset

我正在寻找一种方法来过滤models.F计算的两个字段的比较。

我的模特(简化):

class Prescription(models.Model):
    treatment_count = models.SmallIntegerField()
    treatments_unregistered = models.SmallIntegerField(default=0)

class Treatment(models.Model):
    prescription = models.ForeignKey(Prescription)

我将max_treatments计算为treatment_count - treatments_unregistered,并将actual_treatments计算为Treatment必须Prescription的FK数。两者都使用注释。

现在我想过滤所有未达到最大治疗的处方。基本上actual_treatments< max_treatments

我尝试了下面的内容,但得到了TypeError: 'bool' object is not iterable

  

Prescription.objects.annotate(max_treatments = models.F(' treatment_count')    - models.F(' treatments_unregistered'))。annotate(actual_treatments = models.Count(' treatment'))。filter(models.F(' actual_treatments'))   < models.F(' max_treatments'))

我想我必须忽略文档herehere中的内容?

如果我没有忽视明显的事情,最好的方法是什么?

使用Django 1.9。

1 个答案:

答案 0 :(得分:0)

filter的参数需要采用Q对象或关键字参数的形式,而不是<等布尔表达式。在这种情况下,filter(actual_treatments__lt=models.F('max_treatments'))