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'
が記述されます。
- settings.DEFAULT_AUTO_FIELD
- https://github.com/django/django/blob/128179c0f8381b8fa0c9e630ce2e4a24665fb728/django/conf/global_settings.py#L418
AutoFieldからBigAutoFieldへのマイグレーション
自動で追加されているidフィールドを、AutoFieldからBigAutoFieldに変更したい場合、settings.py に DEFAULT_AUTO_FIELD = 'django.db.fields.BigAutoField'
を記述してからmakemigrationsを実行すると、スキーマ変更のマイグレーションファイルが作られます。
あとはいつも通りマイグレーションを実施できます。