forms.SplitDateTimeField в две таблицы тд по шаблону

У меня есть поле даты, которое я разделил на две части формы следующим образом:

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

И на инициале:

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>

У меня должно быть второе поле (временное поле) на другом тд, как следует. Как мне это сделать, не меняя автоматически сгенерированную таблицу с помощью 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 ответ

Решение

Ну, у вас нет много вариантов для достижения вашей цели. Я вижу, что вы можете иметь два отдельных поля: дату и время с соответствующими виджетами, а также поле даты и времени результата, которое не будет отображаться в шаблоне и будет заполнено чистым методом формы.

Другие вопросы по тегам