Как сделать запрос, который фильтрует строки, в которых один столбец равен другому из той же таблицы? - PullRequest
8 голосов
/ 04 мая 2011

Скажем, у меня есть модель, которая выглядит следующим образом:

class StockRequest(models.Model):
    amount_requested = models.PositiveIntegerField(null=True)
    amount_approved = models.PositiveIntegerField(null=True) 

Есть ли способ сделать запрос django, который бы показывал мне все запросы, где есть некоторая взаимосвязь между amount_requested и amount_approved для конкретного объекта /row?

В SQL это будет так просто:

select * from stockrequest where amount_requested = amount_approved;

или

select * from stockrequest where amount_requested = amount_approved;

В Django я не уверен, что это можно сделать,но я хотел бы представить что-то вроде ниже (ПРИМЕЧАНИЕ: синтаксис полностью составлен и не работает).

StockRequest.objects.filter(amount_requested="__amount_approved")

Ответы [ 3 ]

13 голосов
/ 04 мая 2011
from django.db.models import F
StockRequest.objects.filter(amount_requested=F("amount_approved"))

http://docs.djangoproject.com/en/dev/topics/db/queries/#filters-can-reference-fields-on-the-model

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

Да, вы можете. Вы можете использовать для этого встроенный объект "F" .

Синтаксис будет:

from django.db.models import F
StockRequest.objects.filter(amount_requested=F("amount_approved"))

или

StockRequest.objects.filter(amount_requested__gt=F("amount_approved"))

Примечание: я нашел ответ сразу после того, как закончил писать вопрос. Поскольку я нигде не видел этого в Переполнении стека, я оставляю это с этим ответом.

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

Проверьте документы на функции F():

...