Django Postgres DateRangeField - 我可以使用唯一的验证器吗

标签 django django-models

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

对于预订系统,DateRangeField 似乎很完美。
我可以在该字段中使用验证器 UNIQUE 甚至 UNIQUE_DATE 吗?

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

最佳答案

因此,据我所知,基本上,字段选项 uniqueunique_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/

相关文章:

python - 在 Django 中优化查询

django - 如何使用 Dropzone 在 Django 中上传多个图像并动态保存路径?

python - Django:如何在应用程序中组织静态页面?

django - 使用 Nuxtjs 访问 Django api 时出现 CORS 错误

python - 在 Django 管理员中嵌套内联?

python - 防止 Django 级联删除父类(super class)

python - Django haystack whoosh 超慢

python - 如何使用 URL 正则表达式来匹配 Django 中帖子的确切日期?

python - 当 "include"ing Django URL 模式时,'function' 对象不可订阅?

python - 在 Social-App-Django 中扩展用户模型或自定义管道