Django为唯一字段上的并发操作形成integrityerror

时间:2014-05-22 16:17:10

标签: python django

我注意到一件事,我不知道这是一个真正的问题,还是我做错了设计。

我有一个模特:

class A(Model):
    name = CharField(unique=True, max_length=255)

和一个链接到A的模型,这个模型有一个clean_name()方法,检查该字段在db中是否唯一(忽略了模型在默认情况下已经这样做的事实,我在这里为这个例子指定了)。

在视图中我是否

o = form.save(commit=False)
# xyz
o.save()

并且在#xyz我有另一个客户端插入具有相同name字段值的A对象,o.save()会触发Integrityerror异常,正确阻止插入重复记录。< / p>

我想知道的是如何处理这些情况,我应该用try / except块包装o.save(),然后在表单上填充错误字段,指定选择另一个name值吗?

这在某种情况下应该发生在所有人身上并且解决方案很糟糕,所以我认为我做的事情非常糟糕。

1 个答案:

答案 0 :(得分:0)

我怀疑情况可能如此:

只有在xx_clean()中设置了标志时,模型表单才会提供唯一性验证。如果您使用自己的({1}}覆盖clean,则需要调用超类clean()。请参阅overwriting the clean method