【问题标题】:Updating django models更新 django 模型
【发布时间】:2015-03-17 19:39:16
【问题描述】:

我向现有模型添加了一个新字段。当我使用命令“manage.py makemigrations myapp”时,出现以下错误:

You are trying to add a non-nullable field 'slug' to post without a default. we can not do that < the database needs something to populate existing rows>. 

新字段 slug 的默认值应该是多少?这是我的模型:

class Post(models.Model):
    title = models.CharField(max_length = 100, null = False, blank = False)
    body = models.TextField()
    dateCreated = models.DateTimeField(default=datetime.now, blank=True)
    slug = models.SlugField(unique = True)

    def __str__(self):
        return self.title

【问题讨论】:

  • 这是正常行为...
  • @mevius 但我的模型没有更新
  • @Alexander 这样想——它如何更新?除了 None/NULL 之外,脚本可能决定在这个新字段中放入什么?你说这是不允许的(它既是唯一的约束又是不可为空的)。

标签: python django


【解决方案1】:

这是因为您正在尝试使用不可为空的字段创建迁移,这就是它要求提供默认值的原因。由于它是slug 字段,我将其设置为null=Trueblank=False,然后重试。

另外,你可能想在你的 Django admin.py 文件中设置prepopulated_fields

PS:您不必指定 null = Falseblank = False,因为这些值是默认值。

【讨论】:

    【解决方案2】:

    您不能在没有默认值的情况下向现有模型添加非空字段。如果你必须让它不为空,你应该:

    1. 使用null=True添加字段
    2. 迁移您的数据库
    3. 填充现有行
    4. 删除null=True
    5. 再次迁移

    【讨论】:

    • 这完全正确。这通常通过 2-3 次迁移来完成(取决于 #3 是“数据迁移”还是脚本,还是手动完成或其他)。
    • 谢谢先生。这就是我一直在寻找的
    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2018-05-05
    相关资源
    最近更新 更多