#33100: Add a DateInput widget that provides a date picker via the HTML <input
style="date"> element
-----------------------------+--------------------------------------
     Reporter:  dvg          |                    Owner:  nobody
         Type:  New feature  |                   Status:  new
    Component:  Forms        |                  Version:  3.2
     Severity:  Normal       |               Resolution:
     Keywords:               |             Triage Stage:  Unreviewed
    Has patch:  0            |      Needs documentation:  0
  Needs tests:  0            |  Patch needs improvement:  0
Easy pickings:  0            |                    UI/UX:  0
-----------------------------+--------------------------------------
Description changed by dvg:

Old description:

> To support this request, consider that the StackOverflow question
> [https://stackoverflow.com/q/38601 "Using Django time/date widgets in
> custom form"] gets an average of almost **10k views each year** (which is
> a lot).
>
> == Background
>
> The `forms.DateField` uses a
> [https://docs.djangoproject.com/en/3.2/ref/forms/widgets/#dateinput
> forms.widgets.DateInput] widget, which renders as a standard `<input
> style="text">` in HTML (a simple text box).
>
> It would be very convenient if this widget could provide a date picker by
> default, similar to date fields on the Django admin site, for example.
>
> There are several options here:
>
> - One could use the
> [https://docs.djangoproject.com/en/3.2/ref/forms/widgets/#selectdatewidget
> forms.widgets.SelectDateWidget], but that is not as convenient as a
> proper calendar date picker.
>
> - One could use the Django
> [https://github.com/django/django/blob/main/django/contrib/admin/widgets.py#L49
> admin date (and/or time) widgets], but, as far as I know, the admin
> widgets are not part of the public API, and getting them to work can be a
> puzzle.
>
> - There are also third-party apps that implement date pickers, but those
> introduce additional dependencies.
>
> - Last, but not least, [[https://developer.mozilla.org/en-
> US/docs/Web/HTML/Element/input/date#browser_compatibility | modern
> browsers support the HTML `<input style="date">` element]], which
> provides a very clean solution to the problem described above, without
> any custom CSS or JavaScript.
>
> Although it is not too difficult to implement a custom widget that uses
> `<input style="date">`, one would need to know about it existence first.
>
> == Feature request
>
> Would it be possible to provide something like a
> `forms.widgets.BrowserDateInput` that leverages `<input style="date">`?
>
> A crude implementation could look like this:
>

> {{{
> class BrowserDateInput(forms.widgets.DateInput):
>     def get_context(self, name, value, attrs):
>         context = super().get_context(name, value, attrs)
>         context['widget']['type'] = 'date'
>         return context
> }}}
>
> To set current date and/or minimum/maximum allowable date, we can use the
> `attrs` argument. For example:
>
> {{{
> BrowserDateInput(attrs=dict(value=self.today, min=self.today))
> }}}
>
> Note that the browser automatically takes care of client-side field
> validation.
>
> P.S.  a similar request could be made for a `BrowserTimeInput`.

New description:

 To support this request, consider that the StackOverflow question
 [https://stackoverflow.com/q/38601 "Using Django time/date widgets in
 custom form"] gets an average of almost **10k views each year** (which is
 a lot).

 == Background

 The `forms.DateField` uses a
 [https://docs.djangoproject.com/en/3.2/ref/forms/widgets/#dateinput
 forms.widgets.DateInput] widget, which renders as a standard `<input
 style="text">` in HTML (a simple text box).

 It would be very convenient if this widget could provide a date picker by
 default, similar to date fields on the Django admin site, for example.

 There are several options here:

 - One could use the
 [https://docs.djangoproject.com/en/3.2/ref/forms/widgets/#selectdatewidget
 forms.widgets.SelectDateWidget], but that is not as convenient as a proper
 calendar date picker.

 - One could use the Django
 [https://github.com/django/django/blob/main/django/contrib/admin/widgets.py#L49
 admin date (and/or time) widgets], but, as far as I know, the admin
 widgets are not part of the public API, and getting them to work can be a
 puzzle.

 - There are also third-party apps that implement date pickers, but those
 introduce additional dependencies.

 - Last, but not least, [[https://developer.mozilla.org/en-
 US/docs/Web/HTML/Element/input/date#browser_compatibility | modern
 browsers support the HTML `<input style="date">` element]], which provides
 a very clean solution to the problem described above, without any custom
 CSS or JavaScript.

 Although it is not too difficult to implement a custom widget that uses
 `<input style="date">`, one would need to know about it existence first.

 == Feature request

 Would it be possible to provide something like a
 `forms.widgets.BrowserDateInput` that leverages `<input style="date">`?

 A crude implementation could look like this:


 {{{
 class BrowserDateInput(forms.widgets.DateInput):
     def get_context(self, name, value, attrs):
         context = super().get_context(name, value, attrs)
         context['widget']['type'] = 'date'
         return context
 }}}

 To set current date and/or minimum/maximum allowable date, we can use the
 `attrs` argument. For example:

 {{{
 BrowserDateInput(attrs=dict(value=self.today, min=self.today))
 }}}

 Note that the browser automatically takes care of client-side field
 validation.

 P.S.  a similar request could be made for a `BrowserTimeInput`, although
 localization could complicate matters here (haven't looked into that yet).

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33100#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/068.1f651be7cba4b7cc2e9445749723815a%40djangoproject.com.

Reply via email to