Django forms.DateInput does not apply the attributes given in attrs field
forms.DateField(widget=forms.DateInput(format=('%d-%m-%Y'),attrs={'class': 'datepicker', 'placeholder': 'Select a date', 'type': 'date'}))
when input type does not change this worked for me.
based on response of @Martin and reading the Django documentation the final solution should be:
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 = {
}
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.
you can simply create a HTML Datepicker Without using a fancy JAvascript Library.Here is the simple demo:
First create a dateinput field inherited from Dateinput:
class DateInput(forms.DateInput):
input_type = 'date'
And use this DateInput Field as like this :
class BookingRoomForm(ModelForm):
class Meta:
widgets = {'checkin':DateInput()}
model = BookingRoom
fields = ['checkin',]
If you're not using ModelForm,Use widget something like this :
class BookingRoomForm(ModelForm):
checkin = forms.DateField(widget=DateInput())
class Meta:
model = BookingRoom
fields = ['checkin',]
And the output will be like this : enter image description here