You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django按Genre筛选Series及解决NoReverseMatch错误求助

解决你的两个Django新手问题

问题1:筛选指定Genre下的所有Series

你的ViewGenres视图里的查询逻辑有误,多对多关联的写法不对。可以用两种简单的方式修正:

方法一:通过Genre对象直接获取关联Series(更直观)

修改views.py中的ViewGenres类:

class ViewGenres(generic.ListView):
    model = Series
    template_name = 'videos/genres.html'
    context_object_name = 'series'
    def get_queryset(self):
        # 先拿到当前选中的Genre对象
        target_genre = Genres.objects.get(pk=self.kwargs['pk'])
        # 返回该Genre关联的所有Series
        return target_genre.genre_serie.all()

方法二:使用filter反向查询

如果你更喜欢用filter,可以这样写:

def get_queryset(self):
    # 利用多对多反向关联筛选,注意模型名小写为genres
    return Series.objects.filter(genres__pk=self.kwargs['pk'])

问题2:解决NoReverseMatch错误

这个错误主要有两个原因,修正后就能解决:

  1. 变量名不匹配:你的模板循环变量是s,但你写了ser.id,变量名写错了;
  2. 缺少命名空间:你的urls.py设置了app_name='videos',所以url标签必须指定命名空间。

修改模板代码如下:

{% for s in series %}
<a href='{% url "videos:detail" s.id %}'>{{ s.series_title }}</a>
{% endfor %}

另外小建议:Django模型命名一般用单数(比如把Genres改成Genre),关联字段名也尽量语义化(比如把genre_serie改成series),这样代码更易读,后续维护也更方便~

内容的提问来源于stack exchange,提问作者frnw3h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:28:21