比较对象字段与Django的ORM

2024-05-19 05:21:37 发布

您现在位置:Python中文网/ 问答频道 /正文

Django的ORM是否支持使用小于/大于运算符比较不同表中的列?在

例如,我试图比较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

^{pr2}$

Tags: 对象djangofromidsqlonmytableorm
1条回答
网友
1楼 · 发布于 2024-05-19 05:21:37

洛特的答案是该走的路。下面是一个使用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`
>>> 

相关问题 更多 >

    热门问题