的QuerySet跨越零關係考慮車型:Django的 - 用品質
#Models
class A(models.Model):
fieldOfA = models.CharField(max_length = 4)
class B(models.Model):
fieldOfB = models.CharField(max_length = 4)
class C(models.Model):
classA = models.ForeignKey(A, blank=True, null=True)
classB = models.ForeignKey(B, blank=True, null=True)
當我創建C的對象,我保證一個對象或者是CLASSA或ClassB的關係。
我正在尋找一個單獨的查詢集,它爲特定的fieldOfA或特定的fieldOfB值獲取C的對象。
我試過這個,但是失敗了(返回[],儘管存在有效的結果)。
#Views - assume double underscore in the query
from django.db.models import Q
my_query = C.objects.filter(Q(classA _ _isnull = False, classA _ _fieldOfA = 'foo') | Q(classB _ _isnull = False, classB _ _fieldOfB = 'foo'))
我看到的問題是'|'那是應用的。 classA和classB的兩個不同的查詢集工作正常。任何方式,我可以申請一個單一的查詢集,使其工作?或者更糟糕的是,合併單個查詢集的方法。
不幸的是,消除冗餘並沒有幫助。 SQL有兩個'LEFT OUTER JOINS'(Q內部後跟INNER JOIN)。第二個Q不應該有RIGHT OUTER JOIN? fieldB值不會被恢復。 感謝您的幫助。我現在正在鏈接(以某種方式合併)兩個查詢集,這也適用於我。使用這段代碼 - http://www.djangosnippets.org/snippets/1103/ – tjazz 2009-07-14 11:11:30