Сравнение полей объекта с ORM Джанго - PullRequest
0 голосов
/ 04 мая 2011

Сравнение столбцов в разных таблицах с использованием операторов меньше / больше, чем поддерживается в ORM Джанго?

Например, я пытаюсь сравнить два поля объекта в запросе Джанго, который будет иметь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)

1 Ответ

3 голосов
/ 04 мая 2011

Ответ С. Лотта - путь. Вот пример использования 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`
>>> 
...