2015-08-16 92 views
0

我有這個問題。我在我的Django應用程序的模型中有兩個對象,我有標籤,並且我有包含多個標籤的問題,它的多元關係。我試圖創建具有Q對象,它是像這樣的查詢:Django icontains查詢在manytomany關係中檢索重複的行

questions = questions.filter(Q(title__icontains=searchwords) 
          |Q(tags__name__icontains=searchwords)) 

此查詢的結果,可能能帶給我重複的行和它的邏輯,因爲,第二個條件是適用於每一個在問題中標記,例如,如果我對3個標籤「Pepe」,「Pepi」和「Jose」有疑問,並且搜索詞是「pe」,則查詢將與「Pepe」和「Pepi」 ,最後它將帶回相應於同一個問題的2行。

所以我的問題是,我如何避免重複的行? (不想使用distinct()),Django中有像icontains中的東西,但只與第一個標記符合相匹配。

嗯,我在解釋中盡我所能,對不起我的英語不好。 Greeteings。

+0

如果你反向查詢,使用.exclude()和〜Q() –

回答

0

你需要使用distinct(),如果你不使用PostgreSQL,你也需要使用order_by()

questions = questions.filter(
    Q(title__icontains=searchwords)|Q(tags__name__icontains=searchwords) 
).order_by('some_field').distinct() 
+0

嗨,我已經有了明顯的,但我嘗試着提高這個查詢,因爲它的主要搜索的性能該應用程序,它有點慢。感謝您的建議,我會看看我是否可以通過某個領域進行優化。 –