如何自定义修改django表单并保持默认验证不变

时间:2015-11-21 05:41:52

标签: python django forms validation

我一直在搜索有关如何使用Django的模型默认验证的一些示例,但也能够更改属性。

注意:这将是一个非常高级别的解释,以避免一个长时间的问题

到目前为止,生成表单的简单方法是执行

<form id="some_form" method="post" action="/do/something/"
        enctype="multipart/form-data" autocomplete="off">
    {{ some_form }}
    <button name="submit" type="submit" class="btn btn-custom-primary">Submit</a>
</form>

上面的部分会自动使用你在forms.py和views.py上的内容来渲染一个能够为你生​​成验证的功能完整的表单,因此当你点击提交时,如果有丢失的数据,它会让你知道你错过了什么,它不会让你经历。

但是当您想要向表单添加/更新属性时会发生什么?通过属性CSS属性,如class,id等,如果我决定使用&#39;手册&#39;我可以控制什么属性的方式,而不是让django自动为我渲染表格,如下所示,我放弃了django的默认验证设置。

<form>
{% for field in some_form %}
    <label class="some_class" for="{{ field.name }}">{{ field.label }}</label>
    {{ field }}
{% endfor %}
<button type="submit">Submit</button>
</form>

现在,我找到了一种在forms.py上添加一些属性的方法,见下文

class DoSomething(forms.ModelForm):
def __init__(self, user,  *args, **kwargs):
    super(DoSomething, self).__init__(*args, **kwargs)
    for field in self.Meta.fields:
        self.fields[field].widget.attrs.update({
            'class': 'form-control',
        })

如果我像这样初始化类,我可以添加属性到输入,但我还没有能够为标签添加属性,我想一旦我设法做到这一点,我将能够渲染它正确。这点可能很简单,但我觉得我已经累了。

如何在不丢失默认验证的情况下设置表单样式?是我迄今为止所做的还是有不同的做法吗?

请告知,

EFX

3 个答案:

答案 0 :(得分:0)

试试这个;

AT

答案 1 :(得分:0)

答案一直存在,我在for block {{field.errors}}

之间缺少一段代码
<form>
    {% for field in some_form %}
       {{ field.errors }}
        <label class="some_class" for="{{ field.name }}">{{ field.label }}</label>
        {{ field }}
    {% endfor %}
    <button type="submit">Submit</button>
</form>

一旦我把那部分放在那里,当我把它们留空或者放一个无效的值时会出现验证错误消息

答案 2 :(得分:0)

您可以使用field_args。 假设我有一个表单类city_form,我在其中调用模型city_master。

class city_form(ModelForm):
    class Meta:
        model = city_master
        fields = ('city', 'state', 'status')
        field_args = {
                "city" : {
                    "error_messages" : {
                        "required" : "Please let us know what to call you!"
                    }
                },
                "state" : {
                    "+error_messages" : {
                        "required" : "Please also enter some notes.",
                        "invalid"  : "This is not a valid state."
                    }                       
                }
            }