我注意到一件事,我不知道这是一个真正的问题,还是我做错了设计。
我有一个模特:
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
值吗?
这在某种情况下应该发生在所有人身上并且解决方案很糟糕,所以我认为我做的事情非常糟糕。
答案 0 :(得分:0)
我怀疑情况可能如此:
只有在xx_clean()
中设置了标志时,模型表单才会提供唯一性验证。如果您使用自己的({1}}覆盖clean
,则需要调用超类clean()
。请参阅overwriting the clean method。