Программная установка поля 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
.