Luf*_*ufa 6 django django-forms
出于某种原因,我使用自定义HTML代码来显示表单.我的表单输入获取初始值(日期),并在提交后显示相同的表单.
但提交后,输入没有先前选择的值(只是空).
我{{ Form.Fileld.value|date:"Y-m-d" }}在temlate中使用以获取初始值和提交的值.
似乎初始值和提交值的格式不同:初始值为"datetime",提交后为"string".
这是我的简单测试:
形成
class ShowStartEndDateForm(forms.Form):
start_date = forms.DateField(initial=date.today().replace(day=1),
label="Start",
widget=forms.DateInput(format='%Y-%m-%d'),
input_formats=['%Y-%m-%d'])
...
Run Code Online (Sandbox Code Playgroud)
视图
if request.method == 'POST':
form_date = ShowStartEndDateForm(request.POST)
if form_date.is_valid():
form_was_submitted = True
cd = form_date.cleaned_data
operator = cd['operators']
days=[]
for day in range(0,(cd['end_date']-cd['start_date']).days+1):
days.append(cd['start_date']+relativedelta(days=+day))
else:
form_date = ShowStartEndDateForm()
return render_to_response('epay.html', locals(),
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
模板
<!- HTML FORM here
|classname is my custom template filter.
-->
Date1: {{ form_date.start_date.value|date:"Y-m-d" }} \
({{ form_date.start_date.value|classname }})
Date2: {{ form_date.start_date.value }}
Run Code Online (Sandbox Code Playgroud)
首先在浏览器中调用:
Date1: 2013-10-01 (date)
Date2: 1 October 2013
Run Code Online (Sandbox Code Playgroud)
表格提交后:
Date1: (unicode)
Date2: 2013-10-01
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?访问表单字段初始值和提交值的正确方法是什么?
骗过你
你的问题有点令人困惑(你应该添加更多的实际代码),但我从经验中知道,在格式之间混合时,它是一个很好的约定,只需在一个地方完成.因此,不要像你那样在客户端指定格式,而是在表单本身上全部指定,然后一切都应该(应该)同步.
class ShowStartEndDateForm(forms.Form):
start_date = forms.DateField(initial=date.today().replace(day=1),
label="Start",
widget=DateInput(format='%Y-%m-%d'),
input_formats=['%Y-%m-%d'])
Run Code Online (Sandbox Code Playgroud)
即告诉DateInput小部件要采用什么形式,你告诉input_formats(对于字段本身)期望什么格式(你可以添加多个格式).此外,如果您使用某种类型的日期选择器,您当然需要确保它也使用正确的格式.
编辑
我复制了这一切,一切都很好:
In [1]: from test.forms import *
In [2]: f = ShowStartEndDateForm()
In [3]: print f
<tr>
<th><label for="id_start_date">Start:</label></th>
<td><input id="id_start_date" name="start_date" type="text" value="2013-10-01" /></td>
</tr>
Run Code Online (Sandbox Code Playgroud)
(当然我在这里更改了缩进,以便您可以更清楚地看到它)
| 归档时间: |
|
| 查看次数: |
3845 次 |
| 最近记录: |