如何从 Django 小部件中删除 HTML5 属性
How do I remove from Django widgets HTML5 attributes
Django Widgets 设置 HTML5 maxlength 属性,基于模型 max_length。
class Publication(models.Model):
name = models.CharField(max_length=255)
<input maxlength="255" required="" id="id_name" type="text">
我想删除这个属性,因为它干扰了我自己的验证,这更复杂。
我知道 required 属性可以设置为 false,但我不知道其他 html5 属性。
我想将它们以多种形式应用到不同的领域。
修改表单init可以,但扩展性不是很好
基础class和继承是一种选择,但我不想应用于所有领域。
我正在寻找类似 required=false 的东西,以应用于多个领域。
这是来自 Book 模型的表单示例。我引入了一个名为 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)
我最近正在解决这个问题。我在 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)
仅供参考,这对 Forms 而非 ModelForms 有效。
Django Widgets 设置 HTML5 maxlength 属性,基于模型 max_length。
class Publication(models.Model):
name = models.CharField(max_length=255)
<input maxlength="255" required="" id="id_name" type="text">
我想删除这个属性,因为它干扰了我自己的验证,这更复杂。
我知道 required 属性可以设置为 false,但我不知道其他 html5 属性。
我想将它们以多种形式应用到不同的领域。
修改表单init可以,但扩展性不是很好
基础class和继承是一种选择,但我不想应用于所有领域。
我正在寻找类似 required=false 的东西,以应用于多个领域。
这是来自 Book 模型的表单示例。我引入了一个名为 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)
我最近正在解决这个问题。我在 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)
仅供参考,这对 Forms 而非 ModelForms 有效。