2016-03-06 92 views
1

我有一個ViewSet有一個get_queryset方法。該方法篩選使用Q對象的對象:爲什麼Q對象返回重複的結果?

def get_queryset(self): 
    request = self.request 
    query = Ticket.objects.filter(
          Q(message_type__users__in=[request.user])| 
          Q(reference__to_user=request.user) 
          ) 
    return query 

輸出:

[<Ticket: 24>, <Ticket: 24>, <Ticket: 24>, <Ticket: 24>] 

它返回相同的票證(ID = 24)的四倍。對於 'GET' 來自客戶端的請求,我得到MultipleObjectsReturned例外:

get() returned more than one Ticket -- it returned 4! 

爲什麼Q對象返回多個結果?

回答

2

事實上,這樣SQL的作品,它意味着你有1票,但與該票或者4個message_type或4 reference對象,所以當你JOIN,所有的人都將被退回。

使用.distinct()應該可以解決您的問題。

1

這將過濾到SQL:構建查詢的方式可能導致同一行滿足多個條件或多次滿足相同的條件。

如果這是格式化您的查詢的最佳方式,請嘗試加上.distinct()以避免重複的結果。