【问题标题】:Django - Template form date filtering a fieldDjango - 模板表单日期过滤字段
【发布时间】: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),)

此视图显示表单并在出错时重新显示,因此有两种情况:

  1. 已初始化
  2. 出错

在模板中,我正在尝试使用日期过滤器显示字段 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 似乎是同一时间的对象:&lt;bound method BoundField.value of &lt;django.forms.forms.BoundField object at 0x.....&gt;&gt;

标签: django django-forms django-templates django-template-filters


【解决方案1】:

使用

{{ form.instance.end_time|date:"Y-m-d" }}

代替

{{ form.end_time|date:"Y-m-d" }}

似乎在这两种情况下都有效

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2015-06-18
    • 2015-03-09
    • 1970-01-01
    相关资源
    最近更新 更多