Placeholder, class not getting set when tried to apply through the django’s attrs specifier for forms.DateInput
The form is a ModelForm.
And according to the docs
Takes same arguments as TextInput, with one more optional argument:
Here is the code :
widgets = { 'my_date_field': forms.DateInput(format=('%d-%m-%Y'), attrs={'class':'myDateClass', 'placeholder':'Select a date'} ) }
The same is applied for a forms.TextInput
and it works just fine.
What am I missing here?
Just anybody wants a full class code :
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')
The generated HTML for the field, my_date_field
:
<input type="text" id="id_my_date_field" name="my_date_field">
The generated HTML for the field, field1
:
<input type="text" name="field1" class="textInputClass" placeholder="Enter a Value.." id="id_field1">
Advertisement
Answer
Since you didn’t post your form code, my best guess is that you explicitly instantiated a form field like this confirmed my guess by posting the code that looks roughly like this:
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'}) }
I can say that it’s not working because if you explicitly instantiate a form field like this, Django assumes that you want to completely define form field behavior; therefore, you can’t use the widgets
attribute of the inner Meta
class.
The note at the end of section about overriding the default field types or widgets states that:
Fields defined declaratively are left as-is, therefore any customizations made to Meta attributes such as widgets, labels, help_texts, or error_messages are ignored; these only apply to fields that are generated automatically.