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错误
这个错误主要有两个原因,修正后就能解决:
- 变量名不匹配:你的模板循环变量是
s,但你写了ser.id,变量名写错了; - 缺少命名空间:你的
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
相关产品推荐
相关产品推荐

