gpt4 book ai didi

Django 表单 is_valid() 失败

转载 作者:行者123 更新时间:2023-12-04 03:39:32 27 4
gpt4 key购买 nike

我是网络开发的真正初学者。以下代码在 is_valid() 处失败检查。但我不明白为什么:表单是否应该从 POST 数据中获取其数据?

型号:

class Statement(models.Model):
text = models.CharField(max_length=255)
user = models.ForeignKey(User)
time = models.DateField()
views = models.IntegerField()

模型形式:
class StatementForm(ModelForm):
class Meta:
model = Statement
widgets = {
'time':forms.HiddenInput(),
'user':forms.HiddenInput(),
'views':forms.HiddenInput(),
}

查看功能:
def new(request):  
if request.method == 'POST': # If the form has been submitted...
form = StatementForm(request.POST) # A form bound to the POST data
if form.is_valid():
stmt = form.save()
path = 'stmt/' + stmt.id
return render_to_response(path, {'stmt': stmt})
else:
c = {}
c.update(csrf(request))
loggedin_user = request.user
d = datetime.now()
form = StatementForm(request.POST, initial={'time': d.strftime("%Y-%m-%d %H:%M:%S"), 'user':loggedin_user, 'views':0})
return render_to_response('new_stmt.html', {'form': form, },context_instance=RequestContext(request))

我找到了类似的主题并尝试了很多。这就是我认为它应该工作的方式。我真的需要建议。

最佳答案

模型的所有字段都是必需的。所以,form.is_valid()如果所有字段都填充了正确的值并且没有空白,则为 True。
您已声明字段 time , user , views作为隐藏字段。您确定已将它们填写在模板表单中吗?
此外,您可能想要自动标记字段 time = models.DateField() .修改您的模型字段,例如

time = models.DateField(auto_now=True)`. 

在此之后,您不必以模板形式自己填写。

您的 View 在所有情况下都必须返回 HttpResponse 对象 .如果您的表单无效,即如果 form.is_valid()将返回 False,然后没有 HttpResponse对象将由您的 View 返回。这可能是你失败的根源。添加 else if form.is_valid() 的声明:
from django.http import Http404
def new(request):
if request.method == 'POST': # If the form has been submitted...
form = StatementForm(request.POST) # A form bound to the POST data
if form.is_valid():
stmt = form.save()
path = 'stmt/' + stmt.id
return render_to_response(path, {'stmt': stmt})
else:
# Do something in case if form is not valid
raise Http404
else:
# Your code without changes

关于Django 表单 is_valid() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11071983/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com