Получить набор запросов, используя объекты фильтра на шаблоне в Django - PullRequest
0 голосов
/ 08 июля 2019

В моделях:

class Match(models.Model):
    hot_league = models.ManyToManyField(HotLeague, blank=True)

class HotLeague(models.Model):
    user = models.ManyToManyField(User, blank=True)
    price_pool = models.IntegerField()
    winner = models.IntegerField()

В просмотрах:

match = get_object_or_404(Match, pk=pk)

Здесь мне нужно получить доступ к Match queryset.

Вот почему

В шаблоне:

{% for hot_league in match.hot_league.all %}

Написав match.hot_league.all в шаблоне, я могу получить весь набор запросов класса HotLeague. Но я хочу использовать filter здесь с пользователем. Как и в views, мы можем использовать HotLeague.objects.filter(user=request.user). Но {% for hot_league in match.hot_league.filter(user=request.user) %} не работает с шаблоном.

Как я могу сделать такой фильтр в template?

1 Ответ

1 голос
/ 08 июля 2019

Как я могу сделать такой фильтр в шаблоне?

Шаблоны сознательно ограничены, чтобы избежать этого.Некоторые процессоры шаблонов, такие как Jinja могут выполнять вызовы функций, но обычно, если вам приходится это делать, что-то не так с дизайном.Представления должны определять , что отображать, а шаблоны должны отображать это содержимое в хорошем формате.

Таким образом, вы можете отображать это как:

def some_view(request, pk):
    match = get_object_or_404(Match, pk=pk)
    <b>hot_leagues = match.hot_league.filter(user=request.user)</b>
    return render(
        request,
        'some_template.html',
        {'match': match, 'hot_leagues': <b>hot_leagues</b>}
    )

В вашем шаблоне вы можете сделать так:

{% for hot_league in hot_leagues %}
    <!-- -->
{% endfor %}
...