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

Django中Project对象无remark_set属性报错求助

Django AttributeError: 'Project' object has no attribute 'remark_set' 解决办法

问题原因

你在Remark模型的project外键字段中指定了related_name='project_content_type',这会替换Django默认生成的反向关联属性名remark_set。因此你无法再通过project.remark_set.all()查询关联评论,且你之前尝试的project_content_type.remark_set.all()是错误用法。

解决方案

直接使用自定义的related_name作为反向关联属性名即可:

修正后的views.py代码:

def project(request, pk):
    project = Project.objects.get(id=pk)
    # 使用设置的related_name查询关联的Remark数据
    remark_made = project.project_content_type.all()
    context = {'project':project, 'remark_made':remark_made}
    return render(request, 'base/project.html',context)

备选方案

如果你更习惯默认的remark_set,可以删除Remark模型中project字段的related_name参数,恢复默认行为:

修改后的models.py中Remark类代码:

class Remark(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    # 移除related_name,使用默认的remark_set
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    body = models.TextField()
    updated = models.DateTimeField(auto_now = True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.body[0:50]

此时原views.py代码即可正常运行。


附原报错及代码

报错信息

response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\lavis\Desktop\aai\env\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\lavis\Desktop\aai\base\views.py", line 80, in project
    project = project.remark_set.all()
              ^^^^^^^^^^^^^^^^^^
AttributeError: 'Project' object has no attribute 'remark_set'

原models.py代码

class Project(models.Model):
    host = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    #p_id = 
    name = models.CharField(max_length=200)
    location = models.ForeignKey(Location, on_delete=models.SET_NULL, null=True)
    totalamount = models.IntegerField(null=True, blank=True)
    payments_todate = models.IntegerField(null=True,blank=True)
    description = models.TextField(null=True,blank = True)
    updated = models.DateTimeField(auto_now = True)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-updated','-created']

    def __str__(self):
        return self.name

class Remark(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    project = models.ForeignKey(Project,related_name='project_content_type', on_delete=models.CASCADE)
    body = models.TextField()
    updated = models.DateTimeField(auto_now = True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.body[0:50]

原views.py代码

def project(request, pk):
    project = Project.objects.get(id=pk)
    remark_made = project.remark_set.all()
    context = {'project':project, 'remark_made':remark_made}
    return render(request, 'base/project.html',context)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:24:55