Django Postgres DateRangeField - 我可以使用UNIQUE vaildator

时间:2017-01-27 23:08:05

标签: django django-models

我正在尝试使用Django中一些闪亮的新Postgres字段。

对于预订系统,DateRangeField看起来很完美 我可以在此字段中使用验证器UNIQUE 甚至 UNIQUE_DATE 吗?

遗憾的是,优秀的Django文档没有详细说明验证器和Postgres字段。

1 个答案:

答案 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

我希望有所帮助!