2015-01-16 79 views
0

我想用Django過濾器進行查詢或查詢。代碼我似乎很容易,但它不起作用。我已經閱讀了很多答案,但沒有爲我工作。什麼是錯誤?Django Q對象不起作用

from django.db.models import Q 
from models import Processoren 

cpu = [ 
    "Intel", 
    "AMD" 
] 

queryset = Processoren.objects.filter(Q(naam__contains=cpu[0]) | Q(naam__contains=cpu[1])) 

#queryset = Processoren.objects.filter(naam__contains=cpu[0]) 

print queryset 

註釋的代碼行確實有效,但上面的代碼不行。

這裏爲Q對象的文檔:https://docs.djangoproject.com/en/1.7/topics/db/queries/#complex-lookups-with-q-objects

在這裏,一個相關的問題,但是這並沒有爲我工作: How to use OR using Django's model filter system?

什麼是錯的還是什麼我忘了?

+0

與mongoengine有什麼關係? 'Processoren'是一個mongoengine模型嗎? – Ross

+0

@Ross這是模型models.py – Sanderr

+0

Django模型或MongoEngine模型 - 與MongoEngine不支持Django Q,但django模型應該有所不同。 – Ross

回答

0

此代碼按預期工作。它產生非常正確的SQL查詢:

SELECT "app_processoren"."id", "app_processoren"."naam" 
FROM "app_processoren" 
WHERE ("app_processoren"."naam" LIKE '%Intel%' OR 
     "app_processoren"."naam" LIKE '%AMD%') 

您的數據有問題。你確定有naam='AMD'的記錄存在嗎?可能他們有不同的情況(例如'Amd')?嘗試__icontains而不是簡單的__contains

+0

感謝您的時間。是的,我確定這是行得通的,因爲這條線正常工作: 'queryset = Processoren.objects.filter(naam__contains = cpu [0])' 另外如果我這樣做:'cpu [1]',我也嘗試過圖標。 因此,我們可以排除數據是正確的? – Sanderr