“Django”;。widget.attrs.update";无效
我有一个带有以下init方法的ModelForm:“Django”;。widget.attrs.update";无效,django,django-forms,django-3.1,Django,Django Forms,Django 3.1,我有一个带有以下init方法的ModelForm: def __init__(self, *args, **kwargs): super(FragebogenForm, self).__init__(*args, **kwargs) self.fields['birth_date'].widget.attrs.update({'type': 'date'}) 这不会更改输入标记的type属性,尽管它应该更改(ctrl+f->“或者如果字段没有直接在表单上声明”)。如果我将其更改
def __init__(self, *args, **kwargs):
super(FragebogenForm, self).__init__(*args, **kwargs)
self.fields['birth_date'].widget.attrs.update({'type': 'date'})
这不会更改输入标记的type属性,尽管它应该更改(ctrl+f->“或者如果字段没有直接在表单上声明”)。如果我将其更改为例如
.widget.attrs.update({'placeholder':'12.12.1999'})
它可以工作,新的占位符将显示在页面上。仅将类型设置为“最新”不起作用,但原因是?小部件的类型由属性决定。输入\u type
属性决定,因此:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['birth_date'].widget.input_type = 'date'
但是如果小部件不是
DateInput
,那么模型中的birth\u date
字段很可能不是models.DateField
,因此最好解决这个问题,而不是在小部件级别解决它。您的模板是什么样的。它只是引用了{{form}}
还是您单独引用了字段?您的第一块代码也是我在一段时间后想到的(仍然不知道为什么您可以通过attrs.update
编辑除类型之外的所有其他HTML标记属性)。在构造函数中编辑字段不是很常见吗?我不知道表单字段的widget属性还有其他规则。
class MyForm(forms.ModelForm):
class Meta:
model = Meta
widgets = {
'birth_date': forms.DateInput()
}