如何从Django小部件中删除HTML5属性

时间:2018-03-01 11:11:02

标签: django django-widget

Django Widgets根据Model max_length设置HTML5 maxlength属性。

class Publication(models.Model):
    name = models.CharField(max_length=255)

<input maxlength="255" required="" id="id_name" type="text">

我想删除此属性,因为它干扰了我自己的验证,这更复杂。

我知道必需属性可以设置为false,但我不知道其他html5属性。

我想将它们以多种形式应用到不同的领域。

修改表单 init 是可以的,但不是很可扩展。

基类和继承是一个选项,但我不想应用于所有字段。

我正在寻找类似于= false的内容,以便应用于多个字段。

2 个答案:

答案 0 :(得分:3)

以下是Book模型中的Form示例。我引入了一个名为title的字段。在 init 方法中,我弹出该字段的maxlength属性。当你进入HTML时,没有maxlength属性。

from django import forms
from .models import Book

class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = ('title',)

    def __init__(self, *args, **kwargs):
        super(BookForm, self).__init__(*args, **kwargs)
        self.fields['title'].widget.attrs.pop('maxlength', None)

答案 1 :(得分:1)

我最近在解决这个问题。我在forms.py中完成了这个:

from django import forms


class ContactForm(forms.Form):
    your_name = forms.CharField(label='Your name', max_length=50, widget=forms.TextInput(attrs={'class':'form-control', 'placeholder':'Enter Name'}))
    your_surname = forms.CharField(required=False,label='Your surname', max_length=50, widget=forms.TextInput(attrs={'class':'form-control', 'placeholder':'Enter Surname'}))


    # Remove html5 attr from input field
    your_name.widget.attrs.pop('maxlength', None)

仅对于info,这适用于Forms而不是ModelForms。