Djangoの自動主キーフィールド

Djangoではモデルクラスに primary_key=True のフィールドを明示的に定義しない場合、自動で id という名前で主キーのフィールドが追加されます。

このとき使われるフィールドのクラスは、Django 3.1以前では AutoField でしたが、Django 3.2から settings.DEFAULT_AUTO_FIELD で指定されたクラスが使われるようになりました。

Djangoにビルトインされている自動インクリメントされる主キーのフィールドクラスは次のとおりです。

  • AutoField
    • 範囲: 1 ~ 2147483647
    • IntegerFieldを継承している
  • BigAutoField
    • Django 1.10 で追加
    • 範囲: 1 ~ 9223372036854775807
    • BigIntegerFieldを継承している
  • SmallAutoField
    • Django 3.0 で追加
    • 範囲: 1 ~ 32767
    • SmallIntegerFieldを継承している

settings.DEFAULT_AUTO_FIELD について

settings.DEFAULT_AUTO_FIELD は、Django 3.2で追加されました。 settings.pyに定義がない場合のデフォルト値は 'django.db.fields.AutoField' です。 startprojectで新規にプロジェクトを作成した場合は、settings.pyには DEFAULT_AUTO_FIELD = 'django.db.fields.BigAutoField' が記述されます。

AutoFieldからBigAutoFieldへのマイグレーション

自動で追加されているidフィールドを、AutoFieldからBigAutoFieldに変更したい場合、settings.py に DEFAULT_AUTO_FIELD = 'django.db.fields.BigAutoField' を記述してからmakemigrationsを実行すると、スキーマ変更のマイグレーションファイルが作られます。

あとはいつも通りマイグレーションを実施できます。

参考