【发布时间】:2012-05-04 05:17:11
【问题描述】:
查看
def editor(request):
form = SessionForm(initial={
'end_time': datetime.datetime.now(),
})
if request.method == 'POST':
form = SessionForm(request.POST)
if form.is_valid():
form.save()
return render_to_response('planner/editor.html',
{'form': form}, context_instance=RequestContext(request),)
此视图显示表单并在出错时重新显示,因此有两种情况:
- 已初始化
- 出错
在模板中,我正在尝试使用日期过滤器显示字段 end_time
测试 1
<div>End value: {{ form.end_time.value }}</div>
<div>End value filtered: {{ form.end_time.value|date:"Y-m-d" }}</div>
案例 1(已初始化)
结束值:2012-04-23 12:30:00
过滤的最终值:2012-04-23
案例 2(错误)
结束值:2012-04-23 12:30:00
过滤后的最终值:
测试 2
现在让我们尝试删除end_time的.value
<div>End value: {{ form.end_time.value }}</div>
<div>End value filtered: {{ form.end_time|date:"Y-m-d" }}</div>
案例 1(已初始化)
结束值:2012-04-23 12:30:00
过滤后的最终值:
案例 2(错误)
结束值:2012-04-23 12:30:00
过滤的最终值:2012-04-23
正如你所看到的,它正在做相反的事情。
这怎么解释?
【问题讨论】:
-
为什么你不断地通过删除和创建而不是更新来更新问题?
-
表单字段不是模型字段,所以我不知道为什么
{{ form.field }}会给你一个 DateTime 而不是一个 Field 实例(也许这是一个新功能?)但实际上是end_time在表单中显示为输入框?这需要在视图代码中使用import pdb; pdb.set_trace(),并使用表单字段、request.POST 等来弄清楚发生了什么。 -
@okm 我删除的最后一个问题是因为我不小心按输入标签中的 Enter 键提交了一半填满的表单,并被拒绝和关闭投票。之前是因为这个问题最初被问得很糟糕,我估计它对任何人都不再有用了。
-
谢谢Yuji,我去试试
pdb -
@YujiTomita 在这两种情况下(初始化和 onerror)
form['start_time'].value似乎是同一时间的对象:<bound method BoundField.value of <django.forms.forms.BoundField object at 0x.....>>
标签: django django-forms django-templates django-template-filters