Django 1.7空白CharField / TextField约定

时间:2014-11-03 16:59:11

标签: python django django-1.7 django-migrations

使用Django的新迁移框架,假设我有以下模型已存在于数据库中:

class TestModel(models.Model):
    field_1 = models.CharField(max_length=20)

我现在想要为模型添加一个新的TextField,所以它看起来像这样:

class TestModel(models.Model):
    field_1 = models.CharField(max_length=20)
    field_2 = models.TextField(blank=True)

当我尝试使用python manage.py makemigrations迁移此模型时,我收到此提示:

You are trying to add a non-nullable field 'field_2' to testmodel without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows)
 2) Quit, and let me add a default in models.py

我可以通过向null=True添加field_2来轻松解决此问题,但Django的惯例是避免在基于字符串的字段(如CharField和TextField)上使用null(来自{{ 3}})。这是一个错误,还是我误解了文档?

2 个答案:

答案 0 :(得分:25)

这不是一个错误,它是有记录和合乎逻辑的。 你添加了一个新字段,这是(按照你的最佳实践,而不是NULL能够让django为现有记录添加一些内容 - 我猜你希望它是空字符串。

你可以

 1) Provide a one-off default now (will be set on all existing rows)

所以只需按1,并提供''(空字符串)作为值。

或在models.py中指定default='',如建议:

 2) Quit, and let me add a default in models.py

答案 1 :(得分:-1)

  1. 选择1,它将直通python终端。
  2. 给出timezone.now(),它将从python终端退出。

注意:它可能不会第一次从终端退出,请再次给出该命令。