【发布时间】:2015-03-06 23:45:26
【问题描述】:
我有一个“项目”模型,我创建了其中的 4 个,名称分别为“Alan Parson's”、“Gutenberg”、“Gutenberg”和“X”。
我刚刚意识到,我希望名称是唯一的,所以我在 project.name 字段上设置了 unique = True
现在,我无法创建另一个“Gutenberg”或“X”或其他任何内容,但 django 对以前的模型具有非唯一名称这一事实没有任何问题。
django 如何确保新字段的唯一性?为什么旧的不是唯一的并不重要,而且 - 通常 - 无论如何都可以告诉哪些模型字段属性(空,空白,唯一......等)将需要对db 架构和迁移?
看起来如果我尝试编辑具有非唯一名称(来自模型表单)的现有项目之一,我会收到关于名称非唯一的错误,但我可以毫无问题地访问这些模型并且甚至在没有警告的情况下将其他对象添加到它们的多对多字段中。这与我的最后一个问题有关——似乎模型上指定的一些参数决定了它们的模型形式如何工作,而不是它们如何工作。我认为空白 = true 意味着模型表单字段可以为空,但 null = true 更“强”,因为这意味着如果实际字段本身没有数据就可以了。
所以,基本上,有什么方法可以轻松查看哪些参数更改需要迁移或“硬”数据库更改
【问题讨论】:
-
如果你使用 Django 的迁移,一个唯一的约束将被添加到列中。只需将
unique=True添加到您的字段中,就不会在没有迁移的情况下修改架构。几乎任何模型字段更改都需要迁移。
标签: django django-models migrate