How can I set a DateField format in django from the model?
Question:
I am creating a django application and I have the next problem: this error is shown when I want to set a date:
ValidationError [u"'12/06/2012' value has an invalid date format. It must be in YYYY-MM-DD format."]
For this model:
class ModelA(models.Model):
date1 = models.DateField(null=True)
date2 = models.DateField(null=True)
How can I set the DateField format to be %m/%d/%Y
.
The option "input_formats"
is not recognized.
Thank you!
Answers:
input_formats
is a forms.DateField
option, not a model.DateField
option. You have to set it in your form, not in your models.
As @bruno as mentioned in his answer, input_formats
is a forms field, however it can be used to control the date format saved from the model.
In settings.py
set DATE_INPUT_FORMATS
as below:
DATE_INPUT_FORMATS = ['%d-%m-%Y']
And in your form you could do something like below:
class ClientDetailsForm(ModelForm):
date_of_birth = DateField(input_formats=settings.DATE_INPUT_FORMATS)
class Meta:
model = ModelA
You could also use the LANGUAGE_CODE to get the correct date formate for the local.
LANGUAGE_CODE ='en-GB'
Then have DATE_INPUT_FORMATS = ['%d-%m-%Y', '%Y-%m-%d']
in the settings.py
which can be called when needed at anytime.
date_birth = forms.DateField(label='Date of birth', widget=forms.SelectDateWidget(years=YEAR_CHOICES, input_formats= DATE_INPUT_FORMATS))
In settings.py, insert:
USE_L10N = False
DATE_INPUT_FORMATS = ['%d/%m/%Y']
- DATE_INPUT_FORMATS’s data type must be a list, containing the format as a string.
- %d/%m/%Y is just my format of choice.
As of lately(jan 2022), settings.py does not contain USE_L10N
by default (neither DATE_INPUT_FORMATS
, but this one is expected not the be there, I guess).
It seems like, although USE_L10N
isn’t there by default, not only it does exists somewhere but it’s also set to True, because setting up DATE_INPUT_FORMATS
alone (i.e. without making USE_L10N
explicitly False) will not do the trick.
For those of you who watch this in 2023!!!
To make this work I just added:
DATE_INPUT_FORMATS = ["%d.%m.%Y"]
USE_L10N = False
in my settings.py and it worked. I now can input 20.12.2020 in my form.
My form is auto generated from models.Model class
I am creating a django application and I have the next problem: this error is shown when I want to set a date:
ValidationError [u"'12/06/2012' value has an invalid date format. It must be in YYYY-MM-DD format."]
For this model:
class ModelA(models.Model):
date1 = models.DateField(null=True)
date2 = models.DateField(null=True)
How can I set the DateField format to be %m/%d/%Y
.
The option "input_formats"
is not recognized.
Thank you!
input_formats
is a forms.DateField
option, not a model.DateField
option. You have to set it in your form, not in your models.
As @bruno as mentioned in his answer, input_formats
is a forms field, however it can be used to control the date format saved from the model.
In settings.py
set DATE_INPUT_FORMATS
as below:
DATE_INPUT_FORMATS = ['%d-%m-%Y']
And in your form you could do something like below:
class ClientDetailsForm(ModelForm):
date_of_birth = DateField(input_formats=settings.DATE_INPUT_FORMATS)
class Meta:
model = ModelA
You could also use the LANGUAGE_CODE to get the correct date formate for the local.
LANGUAGE_CODE ='en-GB'
Then have DATE_INPUT_FORMATS = ['%d-%m-%Y', '%Y-%m-%d']
in the settings.py
which can be called when needed at anytime.
date_birth = forms.DateField(label='Date of birth', widget=forms.SelectDateWidget(years=YEAR_CHOICES, input_formats= DATE_INPUT_FORMATS))
In settings.py, insert:
USE_L10N = False
DATE_INPUT_FORMATS = ['%d/%m/%Y']
- DATE_INPUT_FORMATS’s data type must be a list, containing the format as a string.
- %d/%m/%Y is just my format of choice.
As of lately(jan 2022), settings.py does not contain USE_L10N
by default (neither DATE_INPUT_FORMATS
, but this one is expected not the be there, I guess).
It seems like, although USE_L10N
isn’t there by default, not only it does exists somewhere but it’s also set to True, because setting up DATE_INPUT_FORMATS
alone (i.e. without making USE_L10N
explicitly False) will not do the trick.
For those of you who watch this in 2023!!!
To make this work I just added:
DATE_INPUT_FORMATS = ["%d.%m.%Y"]
USE_L10N = False
in my settings.py and it worked. I now can input 20.12.2020 in my form.
My form is auto generated from models.Model class