Snažím sa používať niektoré z lesklých nových polí Postgres v Django.
Pre rezervačný systém sa zdá, že DateRangeField je perfektný.
Môžem použiť validátory UNIQUE alebo dokonca UNIQUE_DATE v tejto oblasti?
Vynikajúca dokumentácia Django bohužiaľ nevypracováva validátory a polia Postgres.
odpovede:
1 pre odpoveď č. 1Takže v podstate, podľa môjho vedomia, možnosť voľby jedinečný a unique_for_date nepracujte s poliami Postgres DateRange.
Existuje však spôsob používania indexu Porstgres Potrebujeme btree_gist kombinovaný index v Postgrese. Toto je rozšírenie Postgres a je dodávané s Postgresom, stačí ho nainštalovať do databázy
CREATE EXTENSION btree_gist;
Akonáhle to máme, môžeme mať obmedziť na pole date_range spolu s iným poľom v našej tabuľke.
Povedzme, že máme číslo hotelovej izby (room_id) a rozsah dátumu rezervácie (dt_range), ktorý by mal byť v kombinácii jedinečný. Naše obmedzenie by bolo
ALTER TABLE <yourtablename> ADD EXCLUDE USING gist ( room_id WITH =, dt_range WITH && );
Teraz, keď máme rezerváciu izby room_id s konfliktnými dátumami rezervácie, Postgres hodí chybu, ktorá je a
django.db.utils.IntegrityError
Dúfam, že to pomôže!