Как представить два поля модели как одно поле формы в Django?

Я не могу понять, как правильно справиться со следующей ситуацией в Django:

У меня есть диапазон дат в модели, который я храню как два отдельных поля, date_start а также date_end:

start_date = models.DateTimeField()
end_date = models.DateTimeField()

В форме для этой модели я хочу представить это как одно поле с одной меткой:

timespan = forms.Field(widget=widgets.SelectDateRangeWidget(), label="Date Range")

Как и сейчас, я расширил MultiWidget для создания SelectDateRangeWidget:

class SelectDateRangeWidget(forms.MultiWidget):
    ...

Который затем включает в себя два Date виджеты. Я хочу использовать это, но затем очистить его в два отдельных поля модели, а также сохранить возможность загрузки начальных данных в поле формы. Это единственный способ установить вручную initial к значению этих двух полей каждый раз, может быть, в __init__ функции формы, а также вручную очистить ее в этих двух модельных полях, или есть более чистый (так сказать) способ сделать это?

1 ответ

Решение

Кажется, это невозможно в Django с использованием текущего API виджетов. Билет является одним из самых старых билетов на django, ему 7 лет: https://code.djangoproject.com/ticket/27.

Вы можете исключить исходные 2 поля из формы модели, создать новое поле и переопределить метод сохранения формы.

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