我有一个Django查询集,我必须使用.extra(select=)
方法,因为我计算的字段需要WHERE
语句子过滤器。从Django Q()对象获取查询
我在很多地方使用这个WHERE
子句,我想要遵守DRY(在编写原始SQL时通常有点困难)。我用Django的Q()
对象编写了一个声明,我可以重用并添加到原始SQL中。
我知道你可以这样做Queryset.query.__str__()
以获得等效的SQL输出 - 有没有办法用Q
对象做到这一点?
我有一个Django查询集,我必须使用.extra(select=)
方法,因为我计算的字段需要WHERE
语句子过滤器。从Django Q()对象获取查询
我在很多地方使用这个WHERE
子句,我想要遵守DRY(在编写原始SQL时通常有点困难)。我用Django的Q()
对象编写了一个声明,我可以重用并添加到原始SQL中。
我知道你可以这样做Queryset.query.__str__()
以获得等效的SQL输出 - 有没有办法用Q
对象做到这一点?
尝试使用一个单一的过滤器做一个简单的查询是这样的:
from django.db.models import Q
from django.contrib.auth.models import User
print str(User.objects.filter(~Q(is_active=True)).query)
你就可以明白是Q做什么。
我确实了解'Q'做了什么,问题是'Q'上有一个未公开的方法,可以在查询集上调用'.filter()'时生成SQL'WHERE'语句。我想我必须深入到源中才能找到答案。 – jdotjdot 2014-10-12 19:54:34
Q它是一个在过滤方法中使用的对象,我从来没有找到一种单独输出查询的方式,对不起。 – 2014-10-13 04:52:42
在文档中它说'QuerySet.query'为您提供原始SQL吗? – 2014-10-12 00:09:27
对不起,我应该已经更清楚了 - 'QuerySet.query'作为一个命令并没有做任何事情,但是如果你有一个查询集,你可以调用'.query .__ str __()'并且返回SQL语句。 “'QuerySet'”我只是用作占位符。 – jdotjdot 2014-10-12 01:09:10