Python 为什么是;字段是必填的“;在django中提交有效表单后,是否显示每个字段?
当我提交表单时,它会显示一个空白表单,并为每个字段显示“字段是必需的”。但当我再次填写并提交时,它是有效的。为什么会这样Python 为什么是;字段是必填的“;在django中提交有效表单后,是否显示每个字段?,python,django,Python,Django,当我提交表单时,它会显示一个空白表单,并为每个字段显示“字段是必需的”。但当我再次填写并提交时,它是有效的。为什么会这样 def forum_modules(request): if request.method == 'POST': pform = PostForm(data=request.POST, prefix='PostForm') if pform.is_valid(): new_post = pform.save(co
def forum_modules(request):
if request.method == 'POST':
pform = PostForm(data=request.POST, prefix='PostForm')
if pform.is_valid():
new_post = pform.save(commit=False)
new_post.user = request.user
new_post.save()
return HttpResponse("Post was successfully added")
else:
pform = PostForm()
return render(request, 'forum/forum_modules.html', 'pform': pform})
PostForm:
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['title', 'body']
exclude = ['user']
后模型:
class Post(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, )
title = models.CharField(max_length=100)
body = models.TextField()
date = models.DateField(auto_now_add=True, blank=True)
likes = models.IntegerField(default=0, blank=True)
def __str__(self):
return self.title
在POST上实例化时使用前缀,但在GET上不使用前缀。这意味着字段不匹配;在提交时,Django希望字段名以“PostForm”开头,但它不会输出表单中以“PostForm”开头的字段名
我不知道为什么要使用前缀——这里似乎不需要前缀——但如果需要,那么在实例化表单时,您需要在POST和GET块中使用前缀。在POST上实例化时使用前缀,而在GET上不使用前缀。这意味着字段不匹配;在提交时,Django希望字段名以“PostForm”开头,但它不会输出表单中以“PostForm”开头的字段名
我不知道你为什么要使用前缀-这里似乎不需要它-但是如果你这样做,你需要在实例化表单时在POST和GET块中使用它。在
表单
中的prefix
参数,要么在GET和POST表单创建中使用它,要么在两个表单中都不使用它
def forum_modules(request):
if request.method == 'POST':
pform = PostForm(data=request.POST)
if pform.is_valid():
new_post = pform.save(commit=False)
new_post.user = request.user
new_post.save()
return HttpResponse("Post was successfully added")
else:
pform = PostForm()
return render(request, 'forum/forum_modules.html', 'pform': pform})
表单
中的前缀
参数可以在GET和POST表单创建中使用,也可以不在这两个表单中使用
def forum_modules(request):
if request.method == 'POST':
pform = PostForm(data=request.POST)
if pform.is_valid():
new_post = pform.save(commit=False)
new_post.user = request.user
new_post.save()
return HttpResponse("Post was successfully added")
else:
pform = PostForm()
return render(request, 'forum/forum_modules.html', 'pform': pform})
代码在我看来很好。您需要使用
pdb
在函数中插入断点,并跟踪每一行的执行方式。也可以尝试其他浏览器。显示PostForm
的代码我觉得代码很好。您需要使用pdb
在函数中插入断点,并跟踪每一行的执行方式。也可以尝试其他浏览器。显示PostForm
的代码,我明白了,谢谢您的澄清。现在可以了:)我明白了,谢谢你的澄清。现在它工作正常:))