django在提交前形成错误

时间:2015-06-08 14:32:40

标签: django forms django-forms

我的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)

4 个答案:

答案 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?

https://docs.djangoproject.com/en/1.8/topics/forms/

答案 3 :(得分:-2)

这是正常行为。

在客户端检查字段的某些属性。错误消息属于表单,是html的一部分,但在需要之前不会显示。它保存了客户端 - 服务器请求。