Программная установка поля DateTimeRangeField через ModelForm
Я пытаюсь установить DateTimeRangeField в форме Django ModelForm, но получаю ошибку валидации "это поле обязательно". Похоже, что Django не распознает ни экземпляр psycopg2.extras.DateTimeTZRange, ни любую строку даты как допустимое значение.
Как установить значение DateTimeRangeField?
Пример полосатого пуха:
# models.py
from django.contrib.postgres.fields import DateTimeRangeField
class Reservation(models.Model):
range = DateTimeRangeField()
# forms.py
class ReservationForm(forms.ModelForm):
class Meta:
model = Reservation
exclude = []
# test.py
from psycopg2.extras import DateTimeTZRange
form = ReservationForm(data={
'range': DateTimeTZRange(
lower='2024-04-21 10:00',
upper='2024-04-21 11:00'
)
})
if form.is_valid():
form.save()
else:
print(form.errors.as_data())
Выход:
{'range': [ValidationError(['This field is required.'])]}
Вы передаете данные с помощью:
form = ReservationForm(
data={
'range_0': '2024-04-21 10:00',
'range_1': '2024-04-21 10:00',
}
)
А RangeWidget использует подвиджеты для отображения "от" и "до". Они имеют суффикс "индекс", поэтому в данном случае range_0 и range_1.