/ / Django Postgres DateRangeField - kann ich UNIQUE Vaildator - Django, Django-Modelle verwenden

Django Postgres DateRangeField - kann ich UNIQUE Vaildator - Django, Django-Modelle verwenden

Ich versuche, einige der glänzenden neuen Postgres-Felder in Django zu benutzen.

Für ein Buchungssystem scheint das DateRangeField perfekt zu sein.
Kann ich das benutzen? Validatoren EINZIGARTIG oder auch UNIQUE_DATE in Bezug auf dieses Feld?

Die ausgezeichnete Django-Dokumentation wird leider nicht in Bezug auf Validatoren und die Postgres-Felder ausgearbeitet.

Antworten:

1 für die Antwort № 1

Also im Grunde meines Wissens die Feldoption einzigartig und unique_for_date nicht mit Postgres DateRange-Feldern arbeiten.

Es gibt jedoch einen Weg, einen Porstgres-Index zu verwenden Wir brauchen ein btree_gist kombinierter Index in Postgres. Dies ist eine Postgres-Erweiterung und wird mit Postgres bereitgestellt, wir müssen sie nur in der Datenbank installieren

CREATE EXTENSION btree_gist;

Sobald wir das haben, können wir eine haben Einschränkung für das Feld date_range mit einem anderen Feld kombiniert in unserer Tabelle.

Angenommen, wir haben eine Hotelzimmernummer (room_id) und einen Buchungsdatumsbereich (dt_range), der zusammengenommen eindeutig sein sollte. Unsere Einschränkung wäre

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

Jetzt, wenn wir eine Buchung für Zimmer room_id mit widersprüchlichen Buchungsdaten haben, wird Postgres einen Fehler werfen, der a

django.db.utils.IntegrityError

Ich hoffe das hilft!