0

Django 和编程菜鸟在这里。我正在制作一个选举信息应用程序,在选举页面上我想显示所有正在参加选举的候选人,但我不想显示选举主持人已宣布为被屏蔽用户的候选人。

我可以通过使用 {% for Candidate inelection.candidate_set.all %} 来显示参加选举的所有候选人的列表。但是,我想首先检查候选人是否是blocked_user,如果他们不是blocked_user,则只显示候选人。正如您在下面的模板中看到的那样,我认为我可以使用语句 {% if Candidate inelection.blocked_users.all %},但这对我不起作用......

对不起,我是个菜鸟。任何帮助将不胜感激。

选举细节.html

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

模型.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)})

编辑- 添加了选举的视图

选举.py

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

2 回答 2

1

这种过滤应该在控制器中完成。在将查询传递给模板之前,您可以过滤掉查询中不合适的候选人。

于 2013-08-16T23:26:05.240 回答
0

这应该选择在您的视图中与选举没有阻塞用户关系的所有候选人。

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),则将此过滤移至模型或模型管理器上的方法可能很有用。

于 2013-08-17T15:33:21.933 回答