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'})