#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 django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/068.1f651be7cba4b7cc2e9445749723815a%40djangoproject.com.