Python TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是“DeferredAttribute”

Python TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是“DeferredAttribute”,python,django,Python,Django,我想在我的帖子详细信息页面上做一个评论部分。为此,我在youtube上观看了这方面的教程。在这里,教程使用基于函数的视图,我想使其成为基于类的视图。 有人能帮我把这个转换成基于类的视图吗 在基于函数的视图中 到目前为止,我尝试了这种方法,使它基于类,我知道这是错误的 但这给了我类似这样的错误 函数视图中也存在一些问题。看看你的基于类的视图,如果你想在细节视图中显示注释,那么你不需要这些东西,你只需要这些 class PostDetailView(DetailView): model =

我想在我的帖子详细信息页面上做一个评论部分。为此,我在youtube上观看了这方面的教程。在这里,教程使用基于函数的视图,我想使其成为基于类的视图。 有人能帮我把这个转换成基于类的视图吗

在基于函数的视图中

到目前为止,我尝试了这种方法,使它基于类,我知道这是错误的

但这给了我类似这样的错误


函数视图中也存在一些问题。看看你的基于类的视图,如果你想在细节视图中显示注释,那么你不需要这些东西,你只需要这些

class PostDetailView(DetailView):
    model = Post
    template_name = 'posts/post_detail.html'
要显示与帖子相关的评论,您只需使用相关名称,在评论模型中,您应该命名如下内容

class Comment(models.Model):
     post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='postcomments')
     # ... (other code)
要在html中显示这一点,只需执行以下操作

{% for comment in post.postcomments.all %}
    {{comment.text}}  #add according to your model
{% endfor %}
要在同一页面中创建评论,您需要添加一些额外的内容,确保您也有评论表单

 class PostDetailView(DetailView):
     model = Post
     template_name = 'post/post_detail.html'

     def get_context_data(self, **kwargs):
         context = super(PostDetailView, self).get_context_data(**kwargs)
         context['commentform'] = CommentForm()
         return context

     def post(self, request, pk):
         post = get_object_or_404(Post, pk=pk) #Assuming you have <int:pk> in url, if you have slug change pk to slug
         form = CommentForm(request.POST) #Add your comment form

         if form.is_valid():
            obj  = form.save(commit=False)
            obj.post = post  
            obj.user = self.request.user
            obj.save()
            return redirect('detail', post.pk) # Correct it according your urlpattern name
在相同的post detail html中,您可以简单地添加与其他表单模板相同的html

<form method="POST" action="" >
  {% csrf_token %}
  <p> {{form}}  </p>
  <button type="submit"> Create </button>
</form>

您只想显示评论吗?或者您希望注释表单出现,以便用户可以在同一页面上添加注释?错误的主要原因是obj_id=Post.id comments=comment.objects.filtercontent_type=content_type,object_id=obj_id值Post.id返回延迟属性您实际上需要属于model Post的对象的id请参见Post.id和Post.objects之间存在差异。first.id Post.id返回非整数wheras Post.objects。first返回model Post的对象,而该对象的id属性给出整数So首先,你的functionBasedView也是错误的。首先也要纠正它,然后编辑并删除它repost@BidhanMajhi我想做这两件事,我的意思是用户可以创建评论well@NimishBansal你能告诉我做这件事的正确方法是什么吗?你的基于函数的视图对我来说似乎不合适。先纠正一下。
{% for comment in post.postcomments.all %}
    {{comment.text}}  #add according to your model
{% endfor %}
 class PostDetailView(DetailView):
     model = Post
     template_name = 'post/post_detail.html'

     def get_context_data(self, **kwargs):
         context = super(PostDetailView, self).get_context_data(**kwargs)
         context['commentform'] = CommentForm()
         return context

     def post(self, request, pk):
         post = get_object_or_404(Post, pk=pk) #Assuming you have <int:pk> in url, if you have slug change pk to slug
         form = CommentForm(request.POST) #Add your comment form

         if form.is_valid():
            obj  = form.save(commit=False)
            obj.post = post  
            obj.user = self.request.user
            obj.save()
            return redirect('detail', post.pk) # Correct it according your urlpattern name
<form method="POST" action="" >
  {% csrf_token %}
  <p> {{form}}  </p>
  <button type="submit"> Create </button>
</form>