Django forms.DateInput不应用attrs字段中给出的属性

Thi*_*key 8 python django django-forms django-1.4

占位符,类在尝试通过django的attrs说明符应用于form.DateInput时未设置

表单是ModelForm.

并根据文件

使用与TextInput相同的参数,还有一个可选参数:

这是代码:

widgets = {
   'my_date_field': forms.DateInput(format=('%d-%m-%Y'), 
                    attrs={'class':'myDateClass', 
                           'placeholder':'Select a date'}
                    )
}
Run Code Online (Sandbox Code Playgroud)

同样适用于a forms.TextInput,它工作得很好.

我在这里错过了什么?

任何人都想要一个完整的类代码:

class trademark_form(ModelForm):
    my_date_field = DateField(input_formats=['%d-%m-%Y'])
    class Meta:
        model = myModel

        widgets = {
                   'my_date_field': forms.DateInput(format=('%d-%m-%Y'), attrs={'class':'myDateClass', 'placeholder':'Select a date'}),
                   'field1': forms.TextInput(attrs={'class':'textInputClass', 'placeholder':'Enter a Value..'}),
                   'field2': forms.TextInput(attrs={'class':'textInputClass', 'placeholder':'Enter a Value..', 'readonly':'readonly', 'value':10}),
                   'desc': forms.Textarea(attrs={'class':'textAreaInputClass', 'placeholder':'Enter desc', 'rows':5}),

               }
        exclude = ('my_valid_field')
Run Code Online (Sandbox Code Playgroud)

该字段的生成的HTML, my_date_field:

<input type="text" id="id_my_date_field" name="my_date_field">
Run Code Online (Sandbox Code Playgroud)

该字段的生成的HTML, field1:

<input type="text" name="field1" class="textInputClass" placeholder="Enter a Value.." id="id_field1">
Run Code Online (Sandbox Code Playgroud)

Mar*_*tin 13

自从你 没有发布您的表单代码,我最好的猜测是您明确地实例化了这样的表单字段 通过发布看起来大致如下的代码证实了我的猜测:

class MyForm(forms.ModelForm):
    my_date_field = forms.DateField()

    class Meta:
        model = MyModel
        widgets = {
            'my_date_field': forms.DateInput(format=('%d-%m-%Y'), 
                                             attrs={'class':'myDateClass', 
                                            'placeholder':'Select a date'})
        }
Run Code Online (Sandbox Code Playgroud)

我可以说它不起作用,因为如果你明确地实例化这样的表单字段,Django假定你想要完全定义表单字段行为; 因此,您不能使用widgets内部Meta类的属性.

关于覆盖默认字段类型或小部件的部分末尾的注释指出:

声明性地定义的字段保持原样,因此忽略对诸如窗口小部件,标签,help_texts或error_messages等元属性所做的任何自定义; 这些仅适用于自动生成的字段.