Django无法通过URL中的分类名称筛选对应分类内容的问题
问题原因
当前视图逻辑仅查询了全部CategoryPosts数据,未根据URL匹配到的分类进行过滤,因此无法返回对应分类的内容。
修正步骤
- 首先修正
models.py中的拼写错误
原代码中外键字段使用了小写的Foreignkey,Django中正确的类名是驼峰格式的ForeignKey,否则会触发属性错误:
# 修正前 CategoryPostsRev = models.Foreignkey(CategoryType, related_name='topics',on_delete=models.CASCADE) # 修正后 CategoryPostsRev = models.ForeignKey(CategoryType, related_name='topics',on_delete=models.CASCADE)
- 修改
views.py中的查询逻辑,添加筛选条件
有两种写法可选,效果一致:
写法1:直接筛选外键关联对象
from django.shortcuts import render, get_object_or_404 def Category(request,Category_id): # 用get_object_or_404替代get,不存在对应分类时返回404,避免500错误 CategoryObj = get_object_or_404(CategoryType, CategoryNameUrl=Category_id) # 筛选外键指向当前分类的文章 posts = CategoryPosts.objects.filter(CategoryPostsRev=CategoryObj) return render(request,'Category.html',{ 'cat':CategoryObj, 'post':posts })
写法2:使用外键的related_name直接查询(更简洁)
因为你在定义外键时设置了related_name='topics',可以直接通过分类对象反向查询关联的所有文章:
from django.shortcuts import render, get_object_or_404 def Category(request,Category_id): CategoryObj = get_object_or_404(CategoryType, CategoryNameUrl=Category_id) # 反向查询关联文章 posts = CategoryObj.topics.all() return render(request,'Category.html',{ 'cat':CategoryObj, 'post':posts })
内容的提问来源于stack exchange,提问作者0xff3z
相关产品推荐
相关产品推荐

