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