/ / Django Postgres DateRangeField - мога ли да използвам UNIQUE vaildator - django, django-models

Django Postgres DateRangeField - мога ли да използвам UNIQUE vaildator - django, django-models

Опитвам се да използвам някои от лъскавите нови полета на Постгрес в Джанго.

За резервационната система DataRangeField изглежда перфектно.
Мога ли да използвам валидатори UNIQUE или дори UNIQUE_DATE по отношение на това поле?

Изключителната документация за Джанго, за съжаление, не е изработена по отношение на валидаторите и полетата постгрес.

Отговори:

1 за отговор № 1

Така че основно, доколкото ми е известно, опцията на полето единствен по рода си и unique_for_date не работят с полетата Postgres DateRange.

Има обаче начин да използвате индекса Porstgres Нуждаем се от btree_gist комбиниран индекс в Postgres. Това е разширение Postgres и се предоставя с Postgres, просто трябва да го инсталираме в базата данни

CREATE EXTENSION btree_gist;

Щом имаме това, можем да имаме ограничение на полето date_range с комбинирано с друго поле в нашата маса.

Кажете, че имаме номер на хотелска стая (room_id) и диапазон от време за резервация (dt_range), който, в съчетание, трябва да бъде уникален. Нашето ограничение би било

ALTER TABLE <yourtablename> ADD EXCLUDE USING gist ( room_id WITH =, dt_range WITH && );

Сега, когато имаме резервация за стая room_id с противоречиви дати за резервации, Postgres ще хвърли грешка, която е a

django.db.utils.IntegrityError

Надявам се, че това помага!