我想在使用字段 one='a' 和 two='b' 创建对象之前检查数据库,如果数据库已经有字段 one='b' 和 two=' 的行,则不创建(抛出异常) a'(倒序)。即保证(一,二)和(二,一)中只有一个存在。这就像一个广义的唯一性约束。
我正在使用 Django 3.2。
我看到CheckConstraint支持 boolean Expression,一种类型的表达式是聚合。所以我可以想象测试 (one, two) 和 (two, one) 的行数最多为 1。但是,这听起来很昂贵,而且我也没有看到如何在 CheckConstraint 中使用 Count 的示例.
或者,我可以实现一个发出查询的pre_save信号。这似乎更好,因为我手头有数据来形成查询。但是,我看不到如何使用 pre_save 信号来防止保存。它有我可以使用的返回值吗?我在文档中没有看到。
编辑:第三种选择可能会覆盖save
进行检查。
我也对其他想法持开放态度。