我的django表单在初始页面加载时有错误,在表单甚至有机会提交之前。
我的观点:
def example_function(request):
if request.method == 'POST':
# the request is GET
else:
form = MyForm(user=request.user)
import pdb;pdb.set_trace()
return render_to_response('templates/example.html', locals(), context_instance=RequestContext(request),)
我导入pdb
的地方,在控制台中我可以看到我的表单已经有错误。我的控制台中form.errors
的输出是模型中设置为非null的所有字段。
(Pdb) form.errors
{'example_field_1': [u'This field is required.'], 'example_field_2': [u'This field is required.']}
form
尚未提交,但我仍然遇到错误。有人可以解释一下吗?
我正在使用django 1.4
。
我的表格:
class MyForm(forms.ModelForm):
captcha = ReCaptchaField()
_readonly_template = form.TextInput(attrs={'readonly':'readonly'})
first_name = forms.CharField(widget = _readonly_tempalte)
def __init__(self, data=None, *args, **kwargs):
data = data or {}
if 'user' in kwargs:
user = kwargs['user']
del kwargs['user']
data.update({
'first_name' : user.first_name,
})
super(MyForm, self).__init__(data, *args, **kwargs)
class Meta:
model = MyModel
我的模特:
class MyModel(models.Model):
first_name = models.CharField(max_length=255)
example_field_1 = models.CharField(max_length=255)
example_field_2 = models.CharField(max_length=255)
答案 0 :(得分:0)
https://docs.djangoproject.com/en/1.8/ref/forms/validation/
访问form.errors属性将触发各种表单验证方法。渲染表单时,这些错误不会显示出来。
答案 1 :(得分:0)
我不确定用户字段的结构,但请记住,如果您需要用户名,可能需要将其从 request.user 更改为请求。 user.username 即可。
我希望你解决了你的问题,但是如果你没有解决,我有一个类似的问题,我可以通过在检查它是否是POST(或GET)后设置表单时使用“或None”来解决请求。
在你的情况下看起来这可能是一个稍微不同的问题,但我想知道这个代码片段是否可能解决问题:
if request.method == "POST":
form = MyForm(request.POST or None)
# .. do stuff....
else: #.....this is a GET
data = {'user': request.user.username} #note this is changed to username
form = MyForm(data)
答案 2 :(得分:-1)
你不需要做这样的事吗
form = NameForm(request.POST)
而不是尝试使用用户对象来填充表单?用户对象中是否包含example_field_1?
答案 3 :(得分:-2)
这是正常行为。
在客户端检查字段的某些属性。错误消息属于表单,是html的一部分,但在需要之前不会显示。它保存了客户端 - 服务器请求。