Я обновился с Django 1.6.5 (с южными миграциями) до Django 1.8. Я выполнил инструкции здесь: https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-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
как ненулевое значение.