我意识到当我有一个简单的模型时:
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 这样的迁移工具
