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
フィールドがnull値を受け入れるように変更されないことです。その結果、保存しようとするとIntegrityError
に(1048, "Column 'last_login' cannot be null")
と表示されます。
どうすれば修正できますか?データベースのフィールドを手動で変更する必要がありますか、それとも移行で修正する方法はありますか?
Editpython 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
がnullでないことがわかります。
AbstractUser
から継承するカスタムユーザーモデルを使用している場合は、makemigrations
を実行し、そのモデルを含むアプリの移行を生成する必要があります。