Я намагаюсь використовувати деякі з блискучих полів Postgres у Джанго.
Для системи бронювання ДатаRangeField виглядає ідеальним.
Чи можу я використовувати валідатори UNIQUE або навіть UNIQUE_DATE щодо цього поля?
Відмінна документація Джанго, на жаль, не розроблена щодо валідаторів та полів Postgres.
Відповіді:
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 викине помилку, яка є
django.db.utils.IntegrityError
Я сподіваюсь, що допомагає!