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

Django HitCountDetailView报无category属性错误该如何解决?

错误原因
  • 你在get_context_data方法中直接通过self.category、self.slug取值,这里的self指代的是当前视图类的实例,本身不携带Post模型的字段属性,因此会抛出属性不存在的错误。
  • 额外隐藏问题:你自定义的视图类名和继承的父类名完全一致,都是HitCountDetailView,会触发继承递归异常,需要先修改自定义类名。
  • 你提供的Post模型代码中category字段缩进错误,和其他字段不同级,会导致模型定义失败。
修复代码

修正后的视图代码

# 先给导入的父类起别名,避免和自定义类重名
from hitcount.views import HitCountDetailView as BaseHitCountDetailView

class PostDetailView(BaseHitCountDetailView):
    model = Post
    template_name = 'detail.html'
    context_object_name = 'post'
    slug_field = 'slug'
    count_hit = True

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # DetailView 完成查询后会将当前请求的对象存入 self.object 属性
        current_post = self.object
        # 兼容无分类的场景,避免过滤时报错
        if current_post.category:
            context['similar_posts'] = Post.objects.filter(
                category=current_post.category
            ).exclude(slug=current_post.slug)
        else:
            # 无分类时返回空查询集
            context['similar_posts'] = Post.objects.none()
        return context

修正后的路由代码

# 补充slug类型转换器,写法更规范
path('detail/<slug:slug>/', PostDetailView.as_view(), name='post-detail')

修正后的Post模型代码

class Post(models.Model):
    title = models.CharField(max_length=200)
    # 修复缩进问题
    category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True, blank=True)
    slug = models.SlugField(max_length=100, unique=True, editable=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:36:04