我有一個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