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

Вернуться на верх