python - 字段 '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)
网址.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
.
模型的post
字段Comment
应该是一个对象。您也可以使用 post_id,然后它需要是一个整数。您为其分配一个字符串(slug),这在任何一种情况下都不起作用。
由于您只有 slug,因此您应该在将 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')
推荐阅读
- angular - 在 Angular 中使用 Leaflet 时缺少属性错误
- c - 数据段和堆之间的区别
- statistics - 如何在 Math.NET 中对多元正态分布进行采样?
- python - 注册表单不起作用(CSRF 令牌丢失或不正确。) django
- c++ - Is there difference between different ways of creating an object that contains other objects and is passed to a function to be added to a vector
- excel - Inserting "stockhistory" formula into cell using VBA
- javascript - 简单的问题 Vanilla JS 显示不匹配的按钮
- ssh - How to fix path references is ssh?
- python - why locate all on screen in pyautogui returns multiple similar results?
- javascript - How to display escaped HTML inside a code tag generated from markdown sanitized source?