2013-08-16 53 views
0

Django和編程noob在這裏。我正在製作一個選舉信息應用程序,並在選舉頁面上顯示所有正在競選的候選人,但我不要想要顯示選舉的主持人已宣佈阻止的候選人用戶。如何防止阻止的用戶出現在此用戶列表中?

我可以在{%election.candidate_set.all%的候選人}使用顯示在選舉中運行的所有候選人名單。但是,我想首先檢查候選人是否是blocked_user,並且只在候選人不是blocked_user時才顯示候選人。正如你可以在下面的模板中看到的,我認爲我可以使用聲明{%如果候選人在election.blocked_users.all%},但這不適合我...

對不起,我是這樣的菜鳥。任何幫助將不勝感激。

election_detail.html

{% for candidate in election.candidate_set.all %} 
    {% if candidate in election.blocked_users.all %} 
     <!--do nothing--> 
    {% else %}  
    <h3>{{ candidate.name }}</h3> 
    {% endif %} 
{% endfor %} 

models.py

class Election(models.Model): 
    name = models.CharField(max_length=50) 
    description = models.TextField() 
    first_voting_day = models.DateField() 
    last_voting_day = models.DateField(null=True, blank=True) 
    constituency = models.ForeignKey(Constituency) 
    offices = models.ManyToManyField(Office) 
    moderators = models.ManyToManyField(User, related_name='moderator') 
    blocked_users = models.ManyToManyField(User, related_name='blocked_users', blank=True) 

    def __unicode__(self): 
     return unicode(self.name) 

    def get_absolute_url(self): 
     return reverse('election_detail', kwargs={'pk': str(self.id)}) 

編輯 - 添加視圖供選

election.py

class ElectionDetailView(DetailView): 
    model = Election 
    context_object_name = "election" 

回答

1

這種過濾的,應在控制器內完成。在將查詢傳遞給模板之前,將查詢中不適當的候選人過濾掉。

+0

由於結節太空公主,我沒有想到這一點......我其實沒有做之前,從控制器過濾這樣的。 我編輯視圖到上面的帖子。我很困惑,因爲blocked_users是Election的一個屬性。我想是的blocked_users不出現在模板election_detail.html當我打電話{%爲候選人election.candidate_set.all%}。我可以從ElectionDetailView中的election.candidate_set.all中篩選出blocked_users嗎?如果可以的話,你能指出我需要的信息來解決這個問題嗎? –

0

這應該選擇所有與視圖中的選舉沒有blocked_user關係的候選人。

eligible_candidates = election.candidate_set.exclude(id__in = election.blocked_users.all().values_list('id')) 

然後在模板

{% for candidate in eligible_candidates %} 
<h3>{{ candidate.name }}</h3> 
{% endfor %} 

可以是有用的,在提出這個過濾對模型或模型管理的方法,如果這過濾常常會被(DRY)使用。