Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django form integrityerror,用于对唯一字段执行并发操作_Python_Django - Fatal编程技术网

Python Django form integrityerror,用于对唯一字段执行并发操作

Python Django form integrityerror,用于对唯一字段执行并发操作,python,django,Python,Django,我注意到一件事,我不知道这是否是一个真正的问题,或者我正在做一些错误的设计 我有一个模型: class A(Model): name = CharField(unique=True, max_length=255) 一个链接到的modelform,这个modelform有一个clean_name()方法,用于检查该字段在数据库中是否唯一(忽略modelforms默认情况下已经这样做的事实,我在这里的示例中指定) 在我看来,如果我这样做 o = form.save(commit=Fals

我注意到一件事,我不知道这是否是一个真正的问题,或者我正在做一些错误的设计

我有一个模型:

class A(Model):
    name = CharField(unique=True, max_length=255)
一个链接到的modelform,这个modelform有一个clean_name()方法,用于检查该字段在数据库中是否唯一(忽略modelforms默认情况下已经这样做的事实,我在这里的示例中指定)

在我看来,如果我这样做

o = form.save(commit=False)
# xyz
o.save()
#xyz
中,我有另一个客户端插入了一个具有相同
名称
字段值的对象,
o.save()
触发Integrityerror异常,正确地防止插入重复记录

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


这在某种程度上是每个人都会遇到的常见情况,而且解决方案很糟糕,所以我认为我做错了什么

我怀疑可能是这样的:


只有在
xx_clean()
中设置了标志时,模型表单才提供唯一性验证。如果您使用自己的(正如您所拥有的)重写
clean
,则需要调用超类的
clean()
。请参阅。

为什么不直接执行:o=form.save()?这样,下一个条目就不会通过表单验证。@在这种情况下,#xyz将介于form.is#u valid()和form.save()之间。解决方法是首先保存对象(如果在
xyz
中计算了一些必填字段,则使用伪值),并且有一个名为
computing
的布尔字段,当您执行
xyz
时,该字段设置为
True
。完成额外工作后,您可以根据
xyz
的结果对其进行更新/删除,并将
computing
设置为False。你的建议和我的建议都很粗糙,所以我们希望其他人能建议一种更好的方法。用手动事务和选择更新来包装视图可以吗?