south:更新布尔字段

时间:2014-06-02 15:37:53

标签: python django django-models django-south

说我有这个型号:

class Knight(models.Model):
    name = models.CharField(max_length=100)
    of_the_round_table = models.BooleanField()

并说我想将其更改为:

class Knight(models.Model):
    name = models.CharField(max_length=100)
    round_table = models.BooleanField()

schemamigration southtut --auto --update之后,南方提示我不可避免的事情:

 ? The field 'Knight.of_the_round_table' does not have a default specified, yet is NOT NULL.
 ? Since you are adding this field, you MUST specify a default
 ? value to use for existing rows. Would you like to:
 ?  1. Quit now, and add a default to the field in models.py
 ?  2. Specify a one-off value to use for existing columns now
 ? Please select a choice: 2
 ? Please enter Python code for your one-off default value.
 ? The datetime module is available, so you can do e.g. datetime.date.today()
 >>> "True"

最后,当我尝试使用./manage.py migrate someapp迁移时,我收到了这个:

ValueError: invalid literal for int() with base 10: 'True'

不确定为什么" True"是不正确的。我相信我试过没有括号进入它,它也给了它。我在这做错了什么?我该如何输入默认值?

编辑: 附加问题 - 为什么南方要求我为之前的每次迁移输入一个值?如果我再次迁移并更改了' round_table'要{' table',它会要求我为' of_the_round_table = models.BooleanField()',' round_table = models.BooleanField()'设置默认设置。 ,以及' table = models.BooleanField()'。为什么?它不应该只是要求最新的那个,并且无论如何都要使这个过程更快?如果你过去做了很多迁移,我会发现这很痛苦。

1 个答案:

答案 0 :(得分:1)

  1. "True"不是一个字符串的布尔值。使用True

  2. 南方不仅可以向前迁移,也可以向后迁移。如果向后迁移,则需要知道要在“新”列of_the_round_table中放置哪些值。在非空字段上指定默认值可能更容易,或者更好地将迁移定义为rename_column,而不是删除一列并添加另一列(如自动为您所做)。