Формы Джанго.DateInput не применяет атрибуты, заданные в поле attrs

заполнитель, класс не устанавливается при попытке применить через спецификатор attrs django для "формы".DateInput

форма ModelForm.

и по docs

принимает те же аргументы, что и TextInput, с еще одним необязательным аргументом:

вот код :

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

то же самое относится и к 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')

сгенерированный HTML для поля,my_date_field :

<input type="text" id="id_my_date_field" name="my_date_field">

сгенерированный HTML для поля,field1 :

<input type="text" name="field1" class="textInputClass" placeholder="Enter a Value.." id="id_field1">

2 ответов


С вами не публиковать код формы, мое лучшее предположение, что вы явно создали экземпляр поля формы, как это подтвердила мою догадку, разместив код, который выглядит примерно так:

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

Я могу сказать, что он не работает, потому что если вы явно создаете экземпляр поля формы, как это, Django предполагает, что вы хотите полностью определить поведение поля формы; поэтому вы не можете использовать


на основе ответа @Martin и чтения документации Django окончательное решение должно быть:

class MyForm(forms.ModelForm):
    my_date_field = forms.DateField(
        widget=forms.DateInput(format=('%d-%m-%Y'), 
                               attrs={'class':'myDateClass', 
                               'placeholder':'Select a date'}))

    class Meta:
        model = MyModel
        widgets = {
        }