#django
#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 %}
Ответ №1:
Надеюсь, это поможет, я считаю, что лучший подход — упростить это:
{% 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 %}