django3.0からdjango3.2にアップデートした時に警告が出現するようになりました。
(models.W042) Auto-created primary key used when not defining a primary key type, by default ‘django.db.models.AutoField’.
今回はこちらの警告文の対応策を紹介します。
コンテンツ
警告文が出現した状況
djangoのバージョンを3.0から3.2にアップデートし、以下のコマンドを実行時に出現するようになりました。
1 |
% python manage.py runserver |
1 |
% python manage.py test |
警告文の意味
「主キー(primary key)を定義しておけ、そうでない時のデフォルトは「django.db.models.AutoField」だ。」です。
原因
これまでのdjangoのモデルでは、フィールドにprimary_key=Trueがない場合は暗黙の主キー(primary key)が追加されていましたが、この主キー(primary key)の種類をカスタマイズできるようになったことが発端です。
デフォルトは、django.db.models.AutoFieldですが、django.db.models.BigAutoFieldなどのカスタマイズもできます。
対応策
というわけでこの警告文を消すために何かしらの対応をしなければなりません。(うざいので)
対応策としては、3つあります。
settings.pyにデフォルト設定する
あらかじめ、settings.pyに以下の定数を設定しておきます。
settings.py
1 |
DEFAULT_AUTO_FIELD='django.db.models.AutoField' |
modelのidフィールドに明示的に定義する
既にmodelsで定義している場合に、「id = models.AutoField(primary_key=True)」を明示的に定義します。
下はとあるプロフィールを仮定します。
models.py
1 2 3 4 5 6 7 |
from django.db import models from django.apps import AppConfig class MyAppConfig(AppConfig): default_auto_field = 'django.db.models.AutoField' name = 'my_app' |
新たにmodelにテーブルを生成するときに、id = models.AutoField(primary_key=True)を定義する
デフォルトの変更を見越して、新しくmodelにテーブルを定義する時に、id = models.AutoField(primary_key=True)を定義しておきます。
models.py
1 2 3 4 |
from django.db import models class MyModel(models.Model): id = models.AutoField(primary_key=True) |
参考
https://docs.djangoproject.com/en/3.2/releases/3.2/
以上。
最後に
いかがでしたでしょうか。
以上が、「【django】警告文で「Auto-created primary key used when not defining a primary key type, by default ‘django.db.models.AutoField’.」の対応策」の紹介記事になります。
プログラミング学習を効率良く進めるには…
私ヒロヤンがプログラミングを始めた頃は以下のような感じでした。
そしてネットで調べていくうちに膨大な時間が過ぎていきました。
私ヒロヤンの実体験より、プログラミングを効率的に学ぶために大切なことは以下のことだと考えています。
1. いつまでもダラダラとやらないで、目標を決定して短期集中する
2. マンツーマンで、わからない箇所は直ぐに質問をして即レスをもらう
.proでは私ヒロヤンが学習してきたプログラミング経験0からのpython/django、その他webサイト・サービス開発のコースが用意されています。
カウンセリング自体は無料なので話を聞いてみるだけでもいかがでしょうか?
また以下のリンク先ではdjangoを教えてくれるスクールをまとめ紹介しています。
コメントを残す