我正在尝试在 Django 中使用一些 Shiny 的新 Postgres 字段。
对于预订系统,DateRangeField 似乎很完美。
我可以在该字段中使用验证器 UNIQUE 甚至 UNIQUE_DATE 吗?
不幸的是,优秀的 Django 文档没有详细说明验证器和 Postgres 字段。
最佳答案
因此,据我所知,基本上,字段选项 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
希望对您有所帮助!
关于Django Postgres DateRangeField - 我可以使用唯一的验证器吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41904484/