如何创建一个查询来过滤一列等于另一列同一个表的行?

时间:2011-05-04 16:40:46

标签: python django django-queryset

说我的模型看起来像:

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

有没有办法制作一个django查询,它会向我显示特定对象/行上的amount_requested和amount_approved之间存在某种关系的所有请求?

在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 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:2)

是的,你可以。您可以use the built in "F" object执行此操作。

语法为:

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

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

注意:我在写完问题后立即找到答案。由于我在任何地方都没有在Stack Overflow上看过这个,我将这个答案留下来。

答案 2 :(得分:0)

检查F()功能上的docs