从Django 1.6(南方)升级到1.8不会修改用户表

时间:2015-04-28 07:57:40

标签: python mysql django django-south django-1.8

我已经从Django 1.6.5(南迁移)升级到Django 1.8。我按照这里的说明操作: https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south

因此,我删除了South,删除了之前的迁移并运行python manage.py makemigrations,这会生成一个新的迁移文件。然后我运行python manage.py migrate --fake-initial来假冒初始迁移。然后我运行python manage.py migrate

一切正常,没有错误。

我有一个继承AbstractBaseUser的自定义用户模型。在Django 1.8中,似乎last_login字段发生了变化,现在它可以接受null值(https://docs.djangoproject.com/fr/1.8/ref/contrib/auth/#django.contrib.auth.models.User.last_login)。

我遇到的问题是,迁移不会更改数据库表中的last_login字段以接受空值。因此,当我尝试保存时,我会IntegrityError(1048, "Column 'last_login' cannot be null")

我该如何解决这个问题?我是否需要手动更改数据库中的字段,还是有办法通过迁移来修复它?

修改 当我运行python manage.py migrate --fake-initial时,输出是这样的: 正在运行迁移:

  Rendering model states... DONE
  Applying contenttypes.0001_initial... FAKED
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... FAKED
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying core.0001_initial... FAKED
  Applying admin.0001_initial... FAKED
  Applying sessions.0001_initial... FAKED

但是,当我查看数据库时,我仍然看到user_last_login为非空。

1 个答案:

答案 0 :(得分:22)

1.8 release notes中所述:

  

如果您使用的是继承自AbstractUser的自定义用户模型,则需要运行makemigrations并为包含该模型的应用生成迁移。