1. ホーム
  2. python-3.x

[解決済み] Django で主キーの型を定義していないときに主キーを自動生成する警告が表示されます。

2022-09-12 13:50:08

質問

Python を 3.9.1 から 3.9.4 にアップデートしたところです。サーバーを実行しようとしたとき。コンソールに警告が表示されました。

WARNINGS:
learning_logs.Entry: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the LearningLogsConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
learning_logs.Topic: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the LearningLogsConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
No changes detected in app 'learning_logs'

どうすればこれを修正できるのか、教えていただけないでしょうか。 私はこれについてのドキュメントを読みましたが、私はこの部分がどのように理解されていません。 このページ がどのように関連するのか理解できません。

モデル.py

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class Topic(models.Model):
    text = models.CharField(max_length = 200)
    date_added = models.DateTimeField(auto_now_add = True)
    image = models.ImageField(upload_to = 'backgroud_images', null = True, blank = True)
    owner = models.ForeignKey(User,on_delete = models.CASCADE)
    def __str__(self):
        return self.text



class Entry(models.Model):
    topic = models.ForeignKey(Topic,on_delete = models.CASCADE)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add = True)

    class Meta:
        verbose_name_plural = "Entries"

    def __str__(self):
        return self.text[:50]

どのように解決するのですか?

あなたのモデルには主キーがありません。しかし、それらは django によって自動的に作成されています。

自動作成される主キーの種類を選択する必要があります。 https://docs.djangoproject.com/en/3.2/releases/3.2/#customizing-type-of-auto-created-primary-keys (Django 3.2 の新機能です)

これを settings.py に追加します。 DEFAULT_AUTO_FIELD='django.db.models.AutoField'

または

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