我有這個疑問在我的Django項目1.10.1上PY3:符合Q不同的值對象
Event.objects.filter(Q(subject=topic.id) | Q(object=topic.id) | Q(place=topic.id))
如何避免讓兩個完全相同的Event
記錄?
預先感謝您。
我有這個疑問在我的Django項目1.10.1上PY3:符合Q不同的值對象
Event.objects.filter(Q(subject=topic.id) | Q(object=topic.id) | Q(place=topic.id))
如何避免讓兩個完全相同的Event
記錄?
預先感謝您。
使用distinct操作:
Event.objects.filter(Q(subject=topic.id) | Q(object=topic.id) | Q(place=topic.id)).distinct()
從文檔:
默認情況下,一個QuerySet不會消除重複行。實際上,這很少成爲問題,因爲諸如Blog.objects.all()的簡單查詢不會引入重複結果行的可能性。但是,如果您的查詢跨越多個表,則可能在計算QuerySet時得到重複的結果。那時候你會使用distinct()。
在執行此操作之前,請特別注意其「但」條款,除非您希望實際看到重複的結果。
我不認爲這個查詢可以給出重複的結果。
我只是想在我類似的設置類似的查詢時,它會轉換爲SQL查詢,看起來大致是這樣的:
SELECT *
FROM event
WHERE (subject=x OR object=x OR place=x)
這不會複製任何行,所以你實際上並不需要做任何事情以避免重複記錄。
我認爲這不應該被低估。認爲查詢不會重複行要比在不需要時向查詢集添加'distinct()'要好。 – Alasdair
該查詢不應該給重複的事件。如果一個事件具有'subject = topic.id'和'object = topic.id',它將只在查詢集中出現一次。 – Alasdair