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

Django运行报错'function' object has no attribute 'objects'求助

问题原因

报错'function' object has no attribute 'objects'的核心是你代码中调用.objects的blogpost/blogcomment不是Django模型类,而是重名的函数对象。

排查步骤

  • 检查views.py顶部的导入逻辑,确认你导入的blogpost、blogcomment是models.py中定义的模型类,而非其他同名函数。
  • 检查命名冲突:你当前使用的小写模型名不符合Django大驼峰命名规范,极易和视图函数、工具方法重名,比如你是否在当前views.py中定义了同名的blogpost函数?

修复方案

方案1(推荐,符合Django开发规范)

  1. 先修改models.py中的模型类名为大驼峰格式:
from django.db import models

class BlogPost(models.Model):
    slug = models.SlugField(unique=True)
    # 其余原有字段保持不变

class BlogComment(models.Model):
    post = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
    parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)
    sno = models.AutoField(primary_key=True)
    # 其余原有字段保持不变
  1. 在views.py顶部正确导入模型:
from .models import BlogPost, BlogComment
  1. 修改视图代码,同时优化原有不合理的查询逻辑:
def posts(request,slug):        
    # filter返回的是查询集,单篇文章用first()直接取实例,不存在返回404更友好
    post = BlogPost.objects.filter(slug=slug).first()
    if not post:
        from django.http import Http404
        raise Http404("文章不存在")
    # 单实例直接用post=post查询,不需要用post__in
    comment = BlogComment.objects.filter(post=post, parent=None)
    replies = BlogComment.objects.filter(post=post).exclude(parent=None)
    redict={}
    for reply in replies:
        if reply.parent.sno not in redict:
            redict[reply.parent.sno] = [reply]
        else:
            redict[reply.parent.sno].append(reply)
    context = {'post':post, 'comments':comment, 'redict':redict}
    return render(request,'blog/blogpost.html', context)

方案2(不修改模型名的临时修复)

如果不想改动模型命名,直接排查重名问题即可:

  • 如果是当前文件有同名函数,修改函数名即可
  • 如果是导入冲突,导入模型时加别名:
from .models import blogpost as BlogPostModel, blogcomment as BlogCommentModel
# 调用时用别名即可
post = BlogPostModel.objects.filter(slug=slug).first()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:24:01