Django表单is_valid()失败 [英] Django form is_valid() fails
问题描述
is_valid()
检查中失败。但是我不明白为什么:表单应该从POST数据中填写数据? 型号:
$ b $
$ = $。
user = models.ForeignKey(User)
time = models.DateField()
views = models.IntegerField()
ModelForm:
class StatementForm(ModelForm):
class Meta:
model = Statement
widgets = {
'time':forms.HiddenInput(),
'user':forms.HiddenInput(),
'views':forms.HiddenInput(),
}
查看功能:
def new(request):
如果request.method =='POST':#如果表单已经提交...
form = StatementForm(request.POST)#一个表单绑定到POST数据
如果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 = models.DateField()
。修改你的模型字段,如
time = models.DateField(auto_now = True)`。
此后,您不必自己填写模板表单。
您的视图必须在所有情况下返回HttpResponse对象。如果您的表单无效,即如果 form.is_valid()
将返回False,则不会 HttpResponse
对象将返回你的看法。这可能是您失败的根源。如果form.is_valid(),则为添加
else
语句:
from django.http import Http404
def new(request):
if request.method =='POST':#如果表单已经提交.. 。
form = StatementForm(request.POST)#绑定到POST数据的表单
如果form.is_valid():
stmt = form.save()
path =' stmt /'+ stmt.id
return render_to_response(path,{'stmt':stmt})
else:
#如果表单无效,请执行某些操作
raise Http404
其他:
#您的代码没有变化
I am a real beginner in web development. The following code is failing at the is_valid()
check. But I do not understand why: The form should get its data filled from the POST-data or not?
Model:
class Statement(models.Model):
text = models.CharField(max_length=255)
user = models.ForeignKey(User)
time = models.DateField()
views = models.IntegerField()
ModelForm:
class StatementForm(ModelForm):
class Meta:
model = Statement
widgets = {
'time':forms.HiddenInput(),
'user':forms.HiddenInput(),
'views':forms.HiddenInput(),
}
View function:
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))
I found similar topics and tried a lot. This is how i think it should work. I really need advice.
All fields of your model are required. So, form.is_valid()
will be True, if all fields are filled with correct values and are not blanked.
You have declared fields time
, user
, views
as hidden fields. Are you sure, that you have filled them in your template form?
Also, you may want to auto stamp field time = models.DateField()
. Modify your model field like
time = models.DateField(auto_now=True)`.
After this you don't have to fill it by yourself in template form.
Your view must return HttpResponse object in all cases. If your form is not valid, i.e. if form.is_valid()
will return False, then no HttpResponse
object will be returned by your view. This can be the source of your fail. Add else
statement for 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()失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!