在 Django 中未定义主键类型警告时自动创建主键

新手上路,请多包涵

我刚刚将我的 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]

原文由 Hi There 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您无意中将 Django 更新到 3.2,这会警告您,并且提示文本建议您必须按照 文档 设置 DEFAULT_AUTO_FIELD 这样您就可以避免在未来版本中进行不必要的迁移,因为 DEFAULT_AUTO_FIELD 的值将被更改至 BigAutoField

您应该将 DEFAULT_AUTO_FIELD 明确设置为当前 DEFAULT_AUTO_FIELD

DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'

您甚至可以根据应用程序配置它(如果您希望使用当前样式的主键构建新应用程序)

 from django.apps import AppConfig

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

甚至每个模型(气馁)

 from django.db import models

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


您还应该注意版本锁定您的要求,因为您可能会在生产中引入向后不兼容的更改

原文由 iklinac 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题