【问题标题】:Comparing Object Fields with Django's ORM将对象字段与 Django 的 ORM 进行比较
【发布时间】:2011-08-18 04:24:33
【问题描述】:

是否使用 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 假定该值是文字,而不是对象/属性名称。例如

MyTable.objects.filter(val__lt=other__someval)

【问题讨论】:

标签: python django django-orm


【解决方案1】:

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`
>>> 

【讨论】:

  • 这不是答案。这是一个问题。
猜你喜欢
  • 2020-08-18
  • 2022-12-08
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 2022-09-30
相关资源
最近更新 更多