forms.SplitDateTimeField 在两个table td 模板上

forms.SplitDateTimeField in two table td on the template

我有一个日期字段,我在表单上将其拆分为两个元素,如下所示:

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

在我的模板上,我尽量不自定义 table,而是使用 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 的情况下,我应该怎么做?

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

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