2014-10-11 93 views
2

我有一个Django查询集,我必须使用.extra(select=)方法,因为我计算的字段需要WHERE语句子过滤器。从Django Q()对象获取查询

我在很多地方使用这个WHERE子句,我想要遵守DRY(在编写原始SQL时通常有点困难)。我用Django的Q()对象编写了一个声明,我可以重用并添加到原始SQL中。

我知道你可以这样做Queryset.query.__str__()以获得等效的SQL输出 - 有没有办法用Q对象做到这一点?

+0

在文档中它说'QuerySet.query'为您提供原始SQL吗? – 2014-10-12 00:09:27

+0

对不起,我应该已经更清楚了 - 'QuerySet.query'作为一个命令并没有做任何事情,但是如果你有一个查询集,你可以调用'.query .__ str __()'并且返回SQL语句。 “'QuerySet'”我只是用作占位符。 – jdotjdot 2014-10-12 01:09:10

回答

0

尝试使用一个单一的过滤器做一个简单的查询是这样的:

from django.db.models import Q 
from django.contrib.auth.models import User 

print str(User.objects.filter(~Q(is_active=True)).query) 

你就可以明白是Q做什么。

+0

我确实了解'Q'做了什么,问题是'Q'上有一个未公开的方法,可以在查询集上调用'.filter()'时生成SQL'WHERE'语句。我想我必须深入到源中才能找到答案。 – jdotjdot 2014-10-12 19:54:34

+0

Q它是一个在过滤方法中使用的对象,我从来没有找到一种单独输出查询的方式,对不起。 – 2014-10-13 04:52:42