Django“.widget.attrs.update”没有效果
Django ".widget.attrs.update" with NO effect
我有一个带有以下初始化方法的 ModelForm:
def __init__(self, *args, **kwargs):
super(FragebogenForm, self).__init__(*args, **kwargs)
self.fields['birth_date'].widget.attrs.update({'type': 'date'})
这不会更改输入标签的类型属性,尽管它应该 according to the documentation(ctrl + f -> “或者如果字段没有直接在表单上声明”)。如果我将其更改为例如.widget.attrs.update({'placeholder': '12.12.1999'})
有效,新的占位符出现在页面上。只设置类型为date不行,为什么?
小部件的类型由 .input_type
属性决定,因此:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['birth_date'].widget<b>.input_type = 'date'</b>
然而,这通常不是一个好主意,因为小部件的其他项目随后无法正确更改。通常您在 Meta
class:
中指定小部件
class MyForm(forms.ModelForm):
class Meta:
model = Meta
widgets = {
<b>'birth_date': forms.DateInput()</b>
}
但是如果小部件不是 DateInput
,那么您模型中的字段 birth_date
可能不是 models.DateField
,因此最好修复 ]这个而不是在小部件级别解决它。
我刚刚发现了我自己的错误。我没有将初始化程序或 __init__
放在 class 元函数之外。 None 个小部件运行良好
###确保初始化块在外面
class ProfileForm(ModelForm):
class Meta:
model = Profile
fields = ['avatar','company']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['avatar'].widget.attrs.update({'class': 'form-control'})
我有一个带有以下初始化方法的 ModelForm:
def __init__(self, *args, **kwargs):
super(FragebogenForm, self).__init__(*args, **kwargs)
self.fields['birth_date'].widget.attrs.update({'type': 'date'})
这不会更改输入标签的类型属性,尽管它应该 according to the documentation(ctrl + f -> “或者如果字段没有直接在表单上声明”)。如果我将其更改为例如.widget.attrs.update({'placeholder': '12.12.1999'})
有效,新的占位符出现在页面上。只设置类型为date不行,为什么?
小部件的类型由 .input_type
属性决定,因此:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['birth_date'].widget<b>.input_type = 'date'</b>
然而,这通常不是一个好主意,因为小部件的其他项目随后无法正确更改。通常您在 Meta
class:
class MyForm(forms.ModelForm):
class Meta:
model = Meta
widgets = {
<b>'birth_date': forms.DateInput()</b>
}
但是如果小部件不是 DateInput
,那么您模型中的字段 birth_date
可能不是 models.DateField
,因此最好修复 ]这个而不是在小部件级别解决它。
我刚刚发现了我自己的错误。我没有将初始化程序或 __init__
放在 class 元函数之外。 None 个小部件运行良好
###确保初始化块在外面
class ProfileForm(ModelForm):
class Meta:
model = Profile
fields = ['avatar','company']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['avatar'].widget.attrs.update({'class': 'form-control'})