我意识到当我有一个简单的模型时:
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
修饰符 unique=True
的效果是,当我向数据库添加一个类别(通过 HTML 表单)且该类别的实例名称已存在于数据库中时,应用程序将不会碰撞。
相反,我可以访问 form.errors
并将其打印到页面或终端。
如果我省略 unique=True
并尝试向数据库中添加名称已存在的类别,则会收到 IntegrityError
并且我的应用程序崩溃。
所以在我看来,定义unique=True
对于应用程序的行为非常重要。我想那么一定还有其他同样重要的模型属性
在 django 文档中,我可以在哪里阅读有关此内容的信息以及是否还有其他此类属性?
最佳答案
首先,您使用唯一约束创建了模型,因此数据库已经具有唯一约束。类似于(对于 MySQL):
CONSTRAINT myapp_category UNIQUE (name)
现在,您可能正在使用 ModelForm
,它选择此属性 unique=True
,并应用该验证。因此,您可以通过 form.errors
捕获错误并妥善处理。
当您删除该属性时,数据库仍然具有约束,但 ModelForm
不会为您执行该验证,因此会出现 IntegrityError
因此,回答您的问题 - unique=True
确实有助于防止在 ModelForm
上下文中使用它时引发异常,否则您必须自己处理一下,让它优雅地失败。
要从数据库中删除unique
约束,您必须使用south
之类的迁移工具
关于python - django: `unique=True`是否阻止 `IntegrityError`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24633813/