django - Django 表单中的日期时间值(初始和提交具有不同的格式思想)

标签 django django-forms

出于某种原因,我使用自定义 HTML 代码来显示表单。我的表单的输入获取初始值(日期),并在提交后显示相同的表单。

但是提交后,输入没有以前选择的值(只是空的)。

我用 {{ Form.Fileld.value|date:"Y-m-d" }}在模板中获取初始值和提交值。

初始值和提交值似乎采用不同的格式:初始值的“日期时间”和提交后的“字符串”。

这是我的简单测试:

表格

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'])
    ...

查看
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))

模板
<!- 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 }}

首先在浏览器中调用:
Date1: 2013-10-01 (date)
Date2: 1 October 2013

表单提交后:
Date1: (unicode)
Date2: 2013-10-01

我究竟做错了什么?访问表单字段初始值和提交值的正确方法是什么?

谢谢你。

最佳答案

你的问题有点令人困惑(你应该添加更多你的实际代码),但我从经验中知道,在格式之间混合时,在一个地方完成所有事情是一个很好的约定。因此,不要像您那样在客户端指定格式,而是在表单本身上指定所有格式,然后一切都将(应该)同步。

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'])

即您告诉 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>

(当然我在这里更改了缩进,以便您可以更清楚地看到它)

关于django - Django 表单中的日期时间值(初始和提交具有不同的格式思想),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19275568/

相关文章:

python - 如何让用户花时间在 Django 的任务上?

python - django-mptt:如何成功移动节点

python - Django:get_absolute_url 不起作用

python - 在 Django admin 中验证 ManyToManyField 项的数量(使用中间模型)

Paypal "_cart"实现与 django-paypal

javascript - 清理日期字段从 ajax 调用返回到 django View

Django-获取当前的manage.py命令

python - 静态字段在 django 1.11 中不加载

python - django如何异步执行函数,即将任务移交给子进程并返回响应

python - Django ModelForm 覆盖 __init__