我正在尝试使用Django中一些闪亮的新Postgres字段。
对于预订系统,DateRangeField看起来很完美 我可以在此字段中使用验证器UNIQUE 甚至 UNIQUE_DATE 吗?
遗憾的是,优秀的Django文档没有详细说明验证器和Postgres字段。
答案 0 :(得分:2)
基本上,据我所知,字段选项 unique 和 unique_for_date 不适用于Postgres DateRange字段。
但是,有一种方法可以使用Porstgres索引 我们在Postgres中需要一个 btree_gist 组合索引。 这是一个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
我希望有所帮助!