Search code examples
djangodate-range

Django daterangefield in a form


I have a model looking like this:

models.py

class CommissionElection(models.Model):
    electable_time = DateRangeField()

And my form looks like this:

forms.py

class CreateCommissionElection(forms.ModelForm):
    class Meta:
            model = CommissionElection
            fields = ['electable_time',]

Right now the electable time displays like this: enter image description here

What widget is needed to make the fields datefields instead of charfields, so you can pick a date out of a calendar instead of writing it out?


Solution

  • You can specify a different widget for a date field:

    from django.forms.widgets import DateInput
    
    
    class MyDateInput(DateInput):
        input_type = 'date'

    next we can make a form DateField field for this:

    from django.forms.fields import DateField
    
    
    class MyDateField(DateField):
        widget = MyDateInput

    and reuse that in a DateRangeField:

    from django.contrib.postgres.forms.ranges import DateRangeField
    
    
    class MyDateRangeField(DateRangeField):
        base_field = MyDateField

    then we can use this as field:

    class CreateCommissionElection(forms.ModelForm):
        electable_time = MyDateRangeField()
    
        class Meta:
            model = CommissionElection
            fields = [
                'electable_time',
            ]