2011-03-17 53 views
3

在django我想從數據庫中檢索對象取決於其他對象的屬性。如果其他對象之一不存在,則不應影響查詢的結果。該代碼是這樣的:是否有辦法構造一個表示EmptyQueryset的Q對象,即總是返回一個空結果?

from django.db.models import Q 
try: 
    objectA = MyModel.objects.get(id = idA) 
    qA = Q(foo = objectA.bar) 
except MyModel.DoesNot.Exist: 
    qA = Q(???) 
try: 
    objectB = MyModel.objects.get(id = idB) 
    qB = Q(abc = objectB.xyz) 
except MyModel.DoesNot.Exist: 
    qB = Q(???) 
result = MyOtherModel.objects.filter(qA | qB, **other_filter_conditions) 

對於查詢集存在none()方法,它總是返回EmptyQueryset。 Q對象有類似的東西嗎?

或者有沒有更好的方法來解決我的問題?

+0

什麼是'MyModel'和'MyOtherModel'之間的關係。這不僅僅是一個'mymodel__foo = idA'或者'mymodel__abc = idB'種查詢嗎? – 2011-03-17 17:43:18

+0

@ S.Lott:不,Q對象比例子中要複雜得多。 – jammon 2011-03-18 03:30:55

+0

這並沒有真正回答這個問題。 'MyModel'和'MyOtherModel'之間有什麼關係?儘管過濾器可能很複雜,但也可以使用http://docs.djangoproject.com/en/1.2/topics/db/queries/#spanning-multi-valued-relationships技術稍微簡化。 – 2011-03-18 09:46:19

回答

3
qList = [] 
try: 
    objectA = ... 
    qList.append(Q(foo=objectA.bar)) 
except ...: 
    ... 
... 

result = MyOtherMdel.objects.filter(reduce(operator.or_, qList), 
    **other_filter_conditions) 
+0

謝謝。按預期工作。 – jammon 2011-03-17 16:57:51

0

對於查詢集存在無()方法,它總是返回EmptyQueryset。 Q對象有類似的東西嗎?

Q(PK = -1)

相關問題