如何查询过滤某列等于同表另一列的行?

9 投票
3 回答
4133 浏览
提问于 2025-04-16 16:59

假设我有一个模型,长得像这样:

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

查看关于 F() 函数的相关文档,了解更多信息,可以访问这个链接:docs

2

是的,你可以这样做。你可以使用内置的 "F" 对象来实现。

语法如下:

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上没有看到这个,所以我把它留在这里并附上这个答案。

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

这个链接指向的是Django的官方文档,主要讲的是在数据库查询中,如何使用过滤器来引用模型中的字段。简单来说,就是你可以通过一些条件来筛选出你想要的数据,而这些条件可以直接基于你在模型里定义的字段。

撰写回答