見出し画像

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

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履歴を削除して上書するというごまかしにしてもめんどくさいので一々上書きしなくて済むのはかなり楽になりますね


最後までご購読ありがとうございます サービスに将来性や記事に価値を感じましたら、サポートしてください! 支援金は以下の通りに使われます 💻開発の継続  📃商標登録  📣宣伝  🤝 JASRACの提携 🤖サービスの運営維持 🎮 ゲーム会社との収益提携と維持