/ / Django Postgres DateRangeField - czy mogę używać UNIQUE vaildator - django, django-models

Django Postgres DateRangeField - czy mogę używać UNIQUE vaildator - django, django-models

Próbuję użyć niektórych z błyszczących nowych pól Postgres w Django.

W przypadku systemu rezerwacji DateRangeField wydaje się idealny.
Czy mogę użyć walidatory UNIQUE lub nawet UNIQUE_DATE w odniesieniu do tej dziedziny?

Doskonała dokumentacja Django niestety nie jest opracowywana w odniesieniu do walidatorów i pól Postgres.

Odpowiedzi:

1 dla odpowiedzi № 1

Zasadniczo, według mojej wiedzy, opcja pola wyjątkowy i unique_for_date nie działają z polami Postgres DateRange.

Istnieje jednak sposób na użycie indeksu Porstgres Potrzebujemy btree_gist połączony indeks w Postgres. Jest to rozszerzenie PostgreSQL i jest dostarczane z Postgresem, wystarczy zainstalować go w bazie danych za pomocą

CREATE EXTENSION btree_gist;

Kiedy już to zrobimy, możemy mieć ograniczenie na polu date_range w połączeniu z innym polem w naszym stole.

Załóżmy, że mamy numer pokoju hotelowego (room_id) i zakres dat rezerwacji (dt_range), który w połączeniu powinien być unikalny. Nasze ograniczenie byłoby

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

Teraz, gdy mamy rezerwację pokoju roomid ze sprzecznymi datami rezerwacji, Postgres rzuci błąd, który jest

django.db.utils.IntegrityError

Mam nadzieję że to pomogło!