web-dev-qa-db-ja.com

Django 1.6(南)から1.8にアップグレードしても、ユーザーテーブルの「last_login」は変更されません

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でないことがわかります。

25
LondonAppDev

1.8リリースノートに記載されているように

AbstractUserから継承するカスタムユーザーモデルを使用している場合は、makemigrationsを実行し、そのモデルを含むアプリの移行を生成する必要があります。

22
Tim Graham