#11231 closed (duplicate)
forms.DateField, initial doesn't print out in input_formats format
Reported by: | skm | Owned by: | nobody |
---|---|---|---|
Component: | Uncategorized | Version: | 1.0 |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
start_date = forms.DateField(initial=date.today()-timedelta(days=1), input_formats=[DATE_FORMAT], widget=forms.TextInput(attrs={"readonly":"true"}))
I can use strftime() but then in view code, where I am adding timedelta, accessing SearchForm.base_fieldsstart_date.initial doesnt return a datetime object, it returns a string
As well as that, if the value isn't there the format ends up being different to when someone selects a date.
Change History (2)
comment:1 by , 15 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
comment:2 by , 15 years ago
Not sure this is a dupe of #7980, rather I think it is invalid. Some actual code would help understand what you are trying to say here. Based on the summary, and the fact that you are specifying input_formats
for a field you are making read-only, though, it sounds like you are trying to use input_formats
to control how the date is formatted on output. It's not used for that. It controls what formats are acceptable on input. With what you specify, the initial date value as displayed on the form will not necessarily match what you are apparently looking for:
>>> from django import forms >>> from datetime import date, timedelta >>> class DF(forms.Form): ... start_date = forms.DateField(initial=date.today()-timedelta(days=1), input_formats=["%Y %m %d"], widget=forms.TextInput(attrs={"readonly":"true"})) ... >>> df = DF() >>> df.as_p() u'<p><label for="id_start_date">Start date:</label> <input readonly="true" type="text" name="start_date" value="2009-05-28" id="id_start_date" /></p>'
The value on display doesn't match the no-dashes format specified for input_formats
because input_formats
does not control output display. To control the way the initial date is formatted for output, you can use the format
parameter of the DateInput
widget:
>>> class DF2(forms.Form): ... start_date = forms.DateField(initial=date.today()-timedelta(days=1), widget=forms.DateInput(format="%Y %m %d", attrs={"readonly":"true"})) ... >>> df2 = DF2() >>> df2.as_p() u'<p><label for="id_start_date">Start date:</label> <input readonly="true" type="text" name="start_date" value="2009 05 28" id="id_start_date" /></p>'
Note the DateInput
widget was added in r10115 for 1.1 so you'll need to be using the 1.1 beta release or svn trunk version to use it.
This feels like part of #7980, which is being tackled by a Summer of Code project.