在型号中:
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
查询集。
这就是为什么
在模板中:
{% 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
中进行这种过滤?
答案 0 :(得分:1)
如何在模板中进行这种过滤?
故意限制模板 以避免这种情况。某些模板处理器,例如Jinja可以进行函数调用,但通常,如果必须这样做,则设计会出错。视图应确定要呈现的内容,模板应以一种不错的格式呈现该内容。
在您看来,您可以将其呈现为:
def some_view(request, pk):
match = get_object_or_404(Match, pk=pk)
hot_leagues = match.hot_league.filter(user=request.user)
return render(
request,
'some_template.html',
{'match': match, 'hot_leagues': hot_leagues}
)
然后,您可以在模板中将其呈现为:
{% for hot_league in hot_leagues %}
<!-- -->
{% endfor %}