Django并没有在模板中过滤多对多的结果



我有一个应用程序,人们可以在其中为多个艺术家投票。在结果页面上,我想筛选国家。换句话说:我只是不想展示来自某个国家的选票。计票是有效的,但在模板中仍然显示了选民的所有电子邮件,而不仅仅是来自过滤器中的国家。

我的型号:

class Artist(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField('Artist name', max_length=100)
def __str__(self):
return self.name 

class Vote(models.Model):
email = models.EmailField(null=True)
country = CountryField(default="US")
artists = models.ManyToManyField(Artist, related_name='selectedartists')
def __str__(self):
return self.email

完成过滤的视图部分:

results = Artist.objects.filter(selectedartists__isnull=False)
if countryquery == '' or countryquery == 'all':
countryquery = 'all'
results = results.annotate(total=Count('selectedartists', distinct=True))
else:
results = results.filter(selectedartists__country=countryquery)
results = results.annotate(total=Count('selectedartists', filter=Q(selectedartists__country=countryquery), distinct=True))

这是我的模板

{% if results %}
{% for artist in results %}
{{artist.name}} Votes:{ artist.total }}
Voters: {{artist.selectedartists.all|join:', '}}
{% endfor %}
{% else %}
<div class="noresults">No results</div>
{% endif %}

希望这有帮助,我相信最好的方法是简化它:

{% if results %}
{% for artist in results %}
{{artist.name}} Votes:{ artist.total }}
Voters: {% for voter in artist.selectedartists.all %} 
{{ voter }},{% endfor %}
{% endfor %}
{% else %}
<div class="noresults">No results</div>
{% endif %}

最新更新