使用Django的ORM支持的less-than / greater-than运算符比较不同表中的列?
例如,我正在尝试比较Django查询中的两个对象字段,它们的SQL等价于:
SELECT a.id
FROM mytable a
LEFT OUTER JOIN myothertable b ON b.id = a.other_id AND a.val < b.someval
显然,我不能使用普通的filter()表示法,因为RHS假设值是文字,而不是对象/属性名称。 e.g。
MyTable.objects.filter(val__lt=other__someval)
答案 0 :(得分:3)
S.Lott的答案是要走的路。以下是使用F的示例:
class ModelA(models.Model):
val = IntegerField()
model_b = ForeignKey('ModelB')
class ModelB(models.Model):
val = IntegerField()
>>> from django.db.models import F
>>> ModelA.objects.filter(val__lt=F('model_b__val'))
>>> print qs.query
SELECT `test_modela`.`id`, `test_modela`.`val`, `test_modela`.`model_b_id` FROM `test_modela` INNER JOIN `test_modelb` ON (`test_modela`.`model_b_id` = `test_modelb`.`id`) WHERE `test_modela`.`val` < `test_modelb`.`val`
>>>