我正在寻找一种方法来过滤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'))
如果我没有忽视明显的事情,最好的方法是什么?
使用Django 1.9。
答案 0 :(得分:0)
filter
的参数需要采用Q
对象或关键字参数的形式,而不是<
等布尔表达式。在这种情况下,filter(actual_treatments__lt=models.F('max_treatments'))
。