"Object has no property _set" 在 Django 中
"Object has no property _set" in Django
想不出我的错误在哪里。无法通过映射来显示博客评论列表。我正在使用 Django 并做出反应。从下面的代码中,我尝试使用外键评估每个博客 post 的评论。但是我无法从博客中获得评论 属性。如果我执行 {blog.title}
之类的操作,我会在浏览器上返回博客的标题。由于评论与每个 post 相关联,我尝试从博客 object 获取评论的不同属性(正如我在下面的代码中指定的那样),但我得到的值是 undefined
.并拥有以下博客post和博客评论模型:
class BlogComment(models.Model):
post = models.ForeignKey(BlogPost, on_delete=models.SET_NULL, related_name="post_comment", null=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, related_name="user_comment", null=True)
name = models.CharField(max_length=200, null=True, blank=True)
comment = models.TextField(null=True, blank=True)
dateCreated = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.user.username)
class BlogPost(models.Model):
...
author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE)
body = models.TextField()
dateCreated = models.DateTimeField(auto_now_add=True)
两个模型的序列化器是:
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = BlogComment
fields = '__all__'
class BlogPostSerializer(serializers.ModelSerializer):
comments = serializers.SerializerMethodField(read_only=True)
class Meta:
model = BlogPost
fields = "__all__"
def get_comments(self, obj):
comments = obj.comment_set.all()
serializer = CommentSerializer(comments, many=True)
return serializer.data
评论的结尾是path('posts/<str:pk>/comment/', CreateCommentView, name="create-comment"),
。
端点正在运行。我可以从前端向 posts 添加评论。当我尝试映射时出现错误
每个 post 的评论。得到错误:AttributeError: 'BlogPost' object has no attribute 'comment_set'
.
这是我用来映射以在 React 的博客详细信息页面中显示特定 post 的所有博客的代码。我正在评估那里的每个博客:
<h2>{blog.title}</h2>
<img src={blog.image} />
<div variant='flush'>
{blog.comments.map((comment) => (
<div key={comment.id}>
<strong>{comment.name}</strong>
<p>{comment.dateCreated}</p>
<p>{comment.comment}</p>
</div>
))}
</div>
这是我用来映射以在 React 的博客详细信息页面中显示特定 post 的所有博客的代码。如果我不映射,则不会出现错误,我可以添加评论。不过为了显示每个blog下的评论post 我贴图通过。我该如何解决这个问题?
你需要使用post_comment
:
comments = obj.post_comment.all()
您在此处声明:
post = models.ForeignKey(BlogPost, on_delete=models.SET_NULL, related_name="post_comment", null=True)
related_name
用作 Django 关系的名称。查看更多 here.
但是用其他东西改变 post_comment
对我来说是更好的解决方案。
想不出我的错误在哪里。无法通过映射来显示博客评论列表。我正在使用 Django 并做出反应。从下面的代码中,我尝试使用外键评估每个博客 post 的评论。但是我无法从博客中获得评论 属性。如果我执行 {blog.title}
之类的操作,我会在浏览器上返回博客的标题。由于评论与每个 post 相关联,我尝试从博客 object 获取评论的不同属性(正如我在下面的代码中指定的那样),但我得到的值是 undefined
.并拥有以下博客post和博客评论模型:
class BlogComment(models.Model):
post = models.ForeignKey(BlogPost, on_delete=models.SET_NULL, related_name="post_comment", null=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, related_name="user_comment", null=True)
name = models.CharField(max_length=200, null=True, blank=True)
comment = models.TextField(null=True, blank=True)
dateCreated = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.user.username)
class BlogPost(models.Model):
...
author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE)
body = models.TextField()
dateCreated = models.DateTimeField(auto_now_add=True)
两个模型的序列化器是:
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = BlogComment
fields = '__all__'
class BlogPostSerializer(serializers.ModelSerializer):
comments = serializers.SerializerMethodField(read_only=True)
class Meta:
model = BlogPost
fields = "__all__"
def get_comments(self, obj):
comments = obj.comment_set.all()
serializer = CommentSerializer(comments, many=True)
return serializer.data
评论的结尾是path('posts/<str:pk>/comment/', CreateCommentView, name="create-comment"),
。
端点正在运行。我可以从前端向 posts 添加评论。当我尝试映射时出现错误
每个 post 的评论。得到错误:AttributeError: 'BlogPost' object has no attribute 'comment_set'
.
这是我用来映射以在 React 的博客详细信息页面中显示特定 post 的所有博客的代码。我正在评估那里的每个博客:
<h2>{blog.title}</h2>
<img src={blog.image} />
<div variant='flush'>
{blog.comments.map((comment) => (
<div key={comment.id}>
<strong>{comment.name}</strong>
<p>{comment.dateCreated}</p>
<p>{comment.comment}</p>
</div>
))}
</div>
这是我用来映射以在 React 的博客详细信息页面中显示特定 post 的所有博客的代码。如果我不映射,则不会出现错误,我可以添加评论。不过为了显示每个blog下的评论post 我贴图通过。我该如何解决这个问题?
你需要使用post_comment
:
comments = obj.post_comment.all()
您在此处声明:
post = models.ForeignKey(BlogPost, on_delete=models.SET_NULL, related_name="post_comment", null=True)
related_name
用作 Django 关系的名称。查看更多 here.
但是用其他东西改变 post_comment
对我来说是更好的解决方案。