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