pythondjangodjango-forms

Django form.as_p DateField not showing input type as date


Working on my first django app, and I have a model defined with some DateFields, and then a ModelForm off of that model i.e.

models.py

class MyModel(models.Model):
    ...
    my_date = models.DateField('my date')
    ...

class MyModelForm(ModelForm):
    class Meta:
        model = MyModel
        fields = '__all__'

views.py

def show(request):
    form = MyModelForm
    template_name = 'myapp/show.html'
    return render(request,template_name,{'form':form})

and then in my html I use the .as_p to have django render the form for me

<form action="/show/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>

But the DateFields have input type text, not date. Is there a way to change this?


Solution

  • You can create a custom widget:

    from django import forms
    
    class DateInput(forms.DateInput):
        input_type = 'date'
    
    class MyModelForm(forms.ModelForm):
        class Meta:
            model = MyModel
            fields = '__all__'
            widgets = {
                'my_date': DateInput()
            }