Django3.2でrunserverを入力したら突然モデルのWARNINGが出た時の対処法

Wata2022年1月19日 14:18

Django3.2にアップデートしてpython manage.py runserver を入力したらこの画像が出たことはありませんか?

画像を拡大表示

これが起こった時どういう風に対処すればいいかを書き記します。

原因

これが起きた原因として公式サイトではdjangoの3.2による仕様変更によるもので

Customizing type of auto-created primary keys¶

When defining a model, if no field in a model is defined with primary_key=True an implicit primary key is added. The type of this implicit primary key can now be controlled via the DEFAULT_AUTO_FIELD setting and AppConfig.default_auto_field attribute. No more needing to override primary keys in all models.

https://docs.djangoproject.com/en/3.2/releases/3.2/

要約するとはモデル内にprimary_key=Trueのフィールドが定義されていない場合、暗黙のプライマルキーが追加されます。暗黙のプライマルキーはDEFAULT_AUTO_FIELD設定とAppConfig.default_auto_field attributeでコントロールできるようになったので全てのモデルを上書きする必要がなくなったと書かれています。

解決方法

settings.pyに以下のことを書けばOKです。

DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'

models.pyで記述する例もあります。

from django.apps import AppConfig

class MyAppConfig(AppConfig):
    default_auto_field = 'django.db.models.AutoField'
    name = 'my_app'

特定のモデルだけに行う場合はmodels.pyに以下の通りに書けばOKです。

from django.db import models

class MyModel(models.Model):
    id = models.AutoField(primary_key=True)

モデルに今までは必要なかったものを追加することになった時、追加したモデルを上書きはできず、子モデルを作ってその親モデルを紐づけたり、そのモデル属性を追加するのは簡単な方法はデータベースデータを消すという禁じ手であったり、fakeしてMigrations履歴を削除して上書するというごまかしにしてもめんどくさいので一々上書きしなくて済むのはかなり楽になりますね

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA