【问题标题】:How to make a query that filters rows in which one column equals another one of the same table?如何进行查询以过滤其中一列等于同一表的另一列的行?
【发布时间】:2011-08-18 17:06:25
【问题描述】:

假设我有一个看起来像这样的模型:

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")

【问题讨论】:

标签: python django django-queryset


【解决方案1】:
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】:

    是的,你可以。你可以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 上看到过这个,所以我把它留给了这个答案。

    【讨论】:

      【解决方案3】:

      F()函数上检查docs

      【讨论】:

        猜你喜欢
        • 2020-07-09
        • 2014-01-28
        • 2017-08-10
        • 1970-01-01
        • 2020-06-17
        • 2022-10-06
        • 1970-01-01
        • 1970-01-01
        • 2020-10-23
        相关资源
        最近更新 更多