Как представить два поля модели как одно поле формы в 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 поля из формы модели, создать новое поле и переопределить метод сохранения формы.