2010-10-08 95 views
1

我試圖從一個特定的模型獲取查詢。我無法正確過濾數據。django視圖中的多模型過濾

我已經修復了一個錯誤,它返回了其他用戶的數據,但現在它返回了模型中一行數據的重複項。

events = Event.objects.filter(club=user.get_profile().main_club) | Event.objects.filter(invclub=user.get_profile().main_club) | Event.objects.filter(invited=user) 

這是我試圖執行的查詢。

,我瞄準的結果,是讓用戶已手動受邀所有事件(邀請)他們的俱樂部已經邀請(invclub)或他們的俱樂部是主機俱樂部(俱樂部)

我可能接近這個在錯誤的方向,這可能是一個更簡單的方法來做到這一點。任何幫助是極大的讚賞。

編輯:comms.models

class Event(models.Model): 
    title = models.CharField(max_length='255') 
    club = models.ForeignKey(Club, verbose_name="Host Club") 
    invclub = models.ManyToManyField(Club, verbose_name="Invited Clubs", related_name="Invited Clubs", blank=True) 
    l_desc = models.CharField(max_length='255', verbose_name="Location Description") 
    l_long = models.CharField(max_length='255', verbose_name="Longitude", blank=True) 
    l_lat = models.CharField(max_length='255', verbose_name="Latitude", blank=True) 
    edate = models.DateTimeField(default=datetime.now, verbose_name="Event Date", blank=True) 
    length = models.CharField(max_length='255', verbose_name="Event Length", blank=True) 
    invited = models.ManyToManyField(User, related_name="Invited Users", blank=True) 
    attending = models.ManyToManyField(User, related_name="Attending Users", blank=True) 
    declined = models.ManyToManyField(User, related_name="Declined Users", blank=True) 
    description = models.TextField(blank=True) 

修正:

最終解決方案使用Q(),如下建議,而追加.distinct()函數,以確保沒有重複返回對象。

+0

你可以發佈你的模型嗎?沒有模型就很難考慮查詢。 – 2010-10-09 15:29:18

回答

5

你在做什麼是採取三個獨立的查詢和OR他們在一起。我很驚訝,完全可以工作。

相反,你需要的是一個帶有三個標準的查詢,它們一起進行OR編輯。你在Django通過Q()實現了這個目標:

from django.db.models import Q 
main_club = user.get_profile().main_club 
events = Event.objects.filter(Q(club=umain_club) | Q(invclub=main_club) | Q(invited=user)) 
+0

這當然是解決這個問題的一種更有效的方法,但它不能解決我遇到的重複問題。 – 2010-10-10 00:12:01

+1

難道你不能追加'.distinct()'擺脫愚蠢? – 2010-10-10 00:17:47

+0

這工作謝謝我 – 2010-10-10 00:20:50