Django 2.2中的UniqueConstraint不会引发ValidationError

时间:2019-07-17 07:26:25

标签: python django constraints

自django 2.2 docs开始,建议使用UniqueConstraint而不是unique_together,但是该选项不会在django admin中引发ValidationError而不覆盖clean或{{1} }方法(如果提供了validate_unique属性。

是否可以使condition(在django admin中)提高UniqueConstraint(而不是ValidationError)而无需自己执行验证逻辑?

1 个答案:

答案 0 :(得分:1)

您是正确的,documentation在这里引起误解。它说:

  

UniqueConstraints ...利用现有的validate_unique()逻辑,从而启用了两阶段验证。除了IntegrityError上的save()之外,在违反ValidationError的模型验证过程中也会引发UniqueConstraint

如果您使用condition参数,这并不适用。我添加了一个comment on the relevant issue,建议将此添加到文档中。 (更新:此限制现在为documented。)

根据this pull request comment,未实现此操作的原因是……很难。

  

我认为合适的解决方案是暂时完全忽略部分约束...当前的实现还太幼稚...我怀疑这在所有后端上都很难实现。

当然,正如您所说,您始终可以自己覆盖validate_unique()