Opened 5 years ago
Closed 5 years ago
#31595 closed Bug (invalid)
models.Datefield being localized where it shouldn't
Reported by: | Akshay Salunke | Owned by: | nobody |
---|---|---|---|
Component: | Internationalization | Version: | 2.2 |
Severity: | Normal | Keywords: | DateField, chrome, date, format |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
So, I have a DateField in my model and have also set I18N & L10N to True
in settings. When a browser running en-AU
locale visits the website, Django tries to parse the value read from model, using the first value in DATE_INPUT_FORMATS
from /conf.
The bug is when a user in en-AU
locale visits the website, Django reads the Datefield value from model and tries to localize it for en-AU
locale (from DATE_INPUT_FORMATS
in /conf/en_AU) to this format '%d/%m/%Y'
, but html5 requires the value
for <input type="date">
to be explicitly in this format: yyyy-MM-dd. ref1 ref2
This causes an error in chrome dev console and the HTML date field rendered without the date read from the model.
This bug goes away when I disable L10N in settings. I am able to reproduce this bug in en-AU
and en-GB
Attachments (2)
Change History (5)
by , 5 years ago
Attachment: | datepicker-chrome.png added |
---|
comment:1 by , 5 years ago
Description: | modified (diff) |
---|
comment:2 by , 5 years ago
Description: | modified (diff) |
---|
Replying to akshaysalunke13:
So, I have a DateField in my model and have also set I18N & L10N to
True
in settings. When a browser runningen-AU
locale visits the website, Django tries to parse the value read from model, using the first value inDATE_INPUT_FORMATS
from /conf.
The bug is when a user in
en-AU
locale visits the website, Django reads the Datefield value from model and tries to localize it foren-AU
locale (fromDATE_INPUT_FORMATS
in /conf/en_AU) to this format'%d/%m/%Y'
, but html5 requires thevalue
for<input type="date">
to be explicitly in this format: yyyy-MM-dd. [ref](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date) [ref2](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#Format_of_a_valid_date_string).
This causes an error in chrome dev console and the HTML date field rendered without the date read from the model.
This bug goes away when I disable L10N in settings. I am able to reproduce this bug in
en-AU
anden-GB
comment:3 by , 5 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
AFAIK Django does not use type="date"
for its widgets due to browser support being too variable. If you set it yourself, you should at least force the form fields initialized with localize=False
. Anyway, this is entering support territory.
This is how date picker looks in chrome when locale is en-AU even when this field has an initials value.