Django和编程菜鸟在这里。我正在制作一个选举信息应用程序,在选举页面上,我想显示所有在选举中运行的候选人,但我不想要显示候选人哪个主持人选举已宣布被封锁的用户。
我可以使用{%for candidate in election.candidate_set.all%}来显示在选举中运行的所有候选人的列表。但是,我想首先检查候选者是否是blocked_user,并且只显示候选者(如果他们不是blocked_user)。正如您在下面的模板中看到的那样,我认为我可以使用{%if candidate in 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"
答案 0 :(得分:1)
这种过滤应该在控制器中完成。在将查询传递给模板之前,请在查询中过滤掉不合适的候选项。
答案 1 :(得分: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),则可以将此过滤移至模型或模型管理器上的方法。