forms.SplitDateTimeField在模板上的两个表td中

时间:2015-10-12 16:27:24

标签: django datetime split elements

我在一个表单上分成两个元素的日期字段如下:

class InvoiceForm(ModelForm):
    date = forms.SplitDateTimeField(input_time_formats=['%H:%M'], input_date_formats=['%d.%m.%Y'])

init

def __init__(self,*args, **kwargs):
    self.fields['date'].widget.widgets[0].attrs.update({'class' : 'datepicker'}) #assign the class date to the datefield
    self.fields['date'].widget.widgets[1].attrs.update({'class' : 'timepicker'}) #assign the class date to the datefield

在我的模板上,我尽可能地尝试不制作自定义表格,但是使用django完成的自动生成的表格如下:

<form id="form_invoice_add">
{% csrf_token %}
<table class="table">
    {{ form.as_table }}
</table>

不幸的是,两个分裂字段是在同一行上生成的。

<table>
    <tbody>
        <tr>
            <th><label for="id_date_0">Date&nbsp;:</label></th>
            <td><input class="datepicker" id="id_date_0" name="date_0" type="text" value="2015-10-08"><input class="timepicker" id="id_date_1" name="date_1" type="text" value="18:29:43"></td>
        </tr>
    </tbody>
</table>

我应该在另一个td上有第二个字段(时间字段),如下所示。如果不通过django修改我自动生成的表,我该怎么办?

<table>
<tbody>
    <tr>
        <th><label for="id_date_0">Date&nbsp;:</label></th>
        <td><input class="datepicker" id="id_date_0" name="date_0" type="text" value="2015-10-08"></td>
    </tr>
    <tr>
        <th><label for="id_date_0">Date&nbsp;:</label></th>
        <td><input class="timepicker" id="id_date_1" name="date_1" type="text" value="18:29:43"></td>
    </tr>
</tbody>

这是否意味着我应该将表单更改为:

class InvoiceForm(ModelForm):
separate_time = forms.TimeField(input_formats=['%H:%M'])
separate_date = forms.DateField(input_formats=['%d.%m.%Y'])

def clean(self):
    cleaned_data = super(InvoiceForm, self).clean()
    self.cleaned_data['date'] = datetime.datetime.combine(self.cleaned_data['separate_date'], self.cleaned_data['separate_time'])

1 个答案:

答案 0 :(得分:0)

嗯,你没有很多选择来实现你的目标。 我看到的是你实际上可以有两个单独的字段:带有适当小部件的日期和时间,以及不会在模板中显示的结果日期时间字段,将以表单的干净方法填充。