Я обновил 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")
.
Как я могу это исправить? Нужно ли вручную изменять поле в базе данных или есть способ исправить его с помощью миграций?
Edit
Когда я запускаю 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
как not-null.