字段'id'期望一个数字,但得到了'hellooo' - Django博客评论



我试图在我的博客上添加评论,但当我试图提交评论时,我遇到了以下错误:

">字段"id"应为数字,但得到了"hellooo">";

视图.py:

class AddComment(generic.CreateView):
model = Comment
form_class = AddComment
template_name = 'add_comment.html'
def form_valid(self, form):
form.instance.post_id = self.kwargs['slug']
return super().form_valid(form)
success_url = reverse_lazy('blog')

表单.py:

class AddComment(forms.ModelForm):
class Meta:
model = Comment
fields = ('name', 'body')
widgets = {
'Name': forms.TextInput(attrs={'class': 'form-control'}),
'body': forms.Textarea(attrs={'class': 'form-control'}),
}

型号.py:

class Comment(models.Model):
post = models.ForeignKey(Post, on_delete= models.CASCADE, related_name='comments')
name = models.CharField(max_length=255)
body = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '%s - %s' % (self.post.title, self.name)

urls.py:

from . import views
from django.urls import path
urlpatterns = [
path('', views.PostList.as_view(), name='blog'),
path('add_post/', views.AddPost.as_view(), name='add_post'),
path('edit_post/<slug:slug>/', views.EditPost.as_view(), name='edit_post'),
path('delete_post/<slug:slug>/', views.DeletePost.as_view(), name='delete_post'),
path('<slug:slug>/comment/', views.AddComment.as_view(), name='add_comment'),
path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
]

正如您正确理解的那样,问题在于如何将值分配给form.instance.post_id

Comment模型的post字段应该是一个对象。您也可以使用post_id,然后它需要是一个整数。你给它分配了一个字符串(段塞(,在任何一种情况下都不起作用。

由于您只有段塞,因此在将Post对象分配给字段之前,应先获取该对象或其id。

class AddComment(generic.CreateView):
model = Comment
form_class = AddComment
template_name = 'add_comment.html'
def form_valid(self, form):
# Get the slug
slug = self.kwargs['slug']
# Assign as an object
form.instance.post = Post.objects.get(slug=slug)
# Or assign as an integer id
# form.instance.post_id = Post.objects.get(slug=slug).pk
return super().form_valid(form)
success_url = reverse_lazy('blog')

最新更新