更新 Django 3.2 解决 DEFAULT_AUTO_FIELD warnings

当您在Django中定义一个没有指定主键的model时,Django将自动为您创建一个主键。主键设置为整数类型(integer)。如果要覆盖该字段类型,可以在每个模型(model)的基础上执行此操作。

从Django 3.2开始,您现在可以在您的设置(settings)中自定义自动创建的主键的类型。

在Django 3.2中开始新项目时,主键的默认类型设置为BigAutoField,这是一个64位整数(64 bit integer)。但是,早期版本将隐式主键的类型设置为整数(integer)。

这意味着当您升级到3.2版本时,您将开始看到有关您没有显式定义的主键类型的警告。满足Django对显式设置主键类型的要求很容易,但您还需要选择是否要将主键字段类型从整数升级到64位整数。

升级到3.2后,官方文档中的建议是运行以下代码:

python -Wa manage.py test

您应该会看到配置DEFAULT_AUTO_FIELD的警告和提示:

WARNINGS:
blog.BlogPost: (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 BlogConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.

有几种方法可以解决这个问题。一般说来,它们分为两类:不需要迁移的和需要迁移的。

如果您想要最简单的升级路径而不需要迁移,则需要告诉Django将DEFAULT_AUTO_FIELD设置为Autofield,这在幕后是一个IntegerField。有几个地方可以做到这一点

打开项目的settings.py并在文件底部添加新行

DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'

如果您更喜欢在每个应用程序(app)的基础上设置字段类型,而不是整个项目(project),您可以在apps.py中指定这一点。

如果您希望每个应用程序使用不同的自动字段类型,则可能需要执行此操作。对于带有博客应用程序的假设项目,在apps.py中添加default_auto_field行就可以了:

from django.apps import AppConfig

class BlogConfig(AppConfig):
    default_auto_field = 'django.db.models.AutoField'
    name = 'blog'

如果您不介意创建和运行迁移,那么您可以使用新的BigAutoField。同样,有几种方法可以实现这一点:

打开项目的settings.py并将以下内容添加到底部:

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
> python manage.py makemigrations blog

> python manage.py sqlmigrate blog

(2)Set default_auto_field to BigAutoField on a per app basis

如上所述,您可以针对每个应用程序(app)配置该设置,因此在apps.py中,您可以将DEFAULT_AUTO_FIELD设置为BigAutoField:

from django.apps import AppConfig

class BlogConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'my_app'

并再次为您的应用程序创建和运行迁移。

如果您喜欢更细粒度的控制,可以设置每个model的id字段。例如:Blog app可能有一个 BlogPost model。您可以在每个model上显式设置一个id字段。
在假设的博客应用程序中,您可以修改blog/models.py

class BlogPost(models.Model):
    id = models.BigAutoField(primary_key=True)
    # ...other fields

如果您愿意,也可以将公共基础模型子类化。如果您有大量的model,或许可以省去一些打字工作。在假设的blog应用程序中,您将定义一个CommonBaseModel ,然后在每个Model中继承它

from django.db import models

class CommonBaseModel(models.Model):
    id = models.BigAutoField(primary_key=True)

    class Meta:
        abstract = True

# Create your models here.

class BlogPost(CommonBaseModel):
   # ...other fields

在前面两个示例中,如果您希望将主键保留为integer,则可以使用Autofield而不是BigAutoField。但是,您仍然需要进行并运行迁移以保持完全最新,因为您已经更改了模型定义。

Django 3.2允许开发人员定制创建自动主键时使用的字段类型。升级意味着Django会警告您没有设置字段类型。

要使警告静默,您需要在项目、应用程序或模型级别设置默认的自动字段。

Original: https://blog.csdn.net/sunjl_a/article/details/116482203
Author: sunjl_a
Title: 更新 Django 3.2 解决 DEFAULT_AUTO_FIELD warnings



相关阅读

Title: plt.plot(),plt.scatter(),plt.legend函数的用法介绍

plt.plot()函数

plt.plot(x, y, format_string, **kwargs)

参数说明 x

X轴数据,列表或数组,可选 y

Y轴数据,列表或数组 format_string

控制曲线的格式字符串,可选 **kwargs

第二组或更多(x,y,format_string),可画多条曲线

format_string 由颜色字符、风格字符、标记字符组成

  • 颜色字符
  • 'b' 蓝色 'm' 洋红色 magenta
  • 'g' 绿色 'y' 黄色
  • 'r' 红色 'k' 黑色
  • 'w' 白色 'c' 青绿色 cyan
  • '#008000' RGB某颜色 '0.8' 灰度值字符串
  • 多条曲线不指定颜色时,会自动选择不同颜色
  • 风格字符
  • '‐' 实线
  • '‐‐' 破折线
  • '‐.' 点划线
  • ':' 虚线
  • '' ' ' 无线条
  • 标记字符
  • '.' 点标记
  • ',' 像素标记(极小点)
  • 'o' 实心圈标记
  • 'v' 倒三角标记
  • '^' 上三角标记
  • '>' 右三角标记
  • '<'< code> &#x5DE6;&#x4E09;&#x89D2;&#x6807;&#x8BB0;&#x2026;&#x7B49;&#x7B49;<!--'<-->

**kwargs : 第二组或更多(x,y,format_string)

color : 控制颜色, color=’green’
linestyle : 线条风格, linestyle=’dashed’
marker : 标记风格, marker=’o’
markerfacecolor: 标记颜色, markerfacecolor=’blue’
markersize: 标记尺寸, markersize=20

b = np.arange(5)
plt.plot(b,b*1.0,'g.-',b,b*1.5,'rx',b,b*2.0, 'b')
plt.show()

更新 Django 3.2 解决 DEFAULT_AUTO_FIELD warnings

plt.scatter()函数

plt.scatter()函数用于生成一个scatter散点图。

matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, hold=None, **kwargs

参数解释说明x,y表示的是shape大小为(n,)的数组,也就是我们即将绘制散点图的数据点,输入数据。s表示的是大小,是一个标量或者是一个shape大小为(n,)的数组,可选,默认20。c表示的是色彩或颜色序列,可选,默认蓝色’b’。但是c不应该是一个单一的RGB数字,也不应该是一个RGBA的序列,因为不便区分。c可以是一个RGB或RGBA二维行数组。markerMarkerStyle,表示的是标记的样式,可选,默认’o’。cmapColormap,标量或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用。如果没有申明就是image.cmap,可选,默认None。normNormalize,数据亮度在0-1之间,也是只有c是一个浮点数的数组的时候才使用。如果没有申明,就是默认None。vmin,vmax标量,当norm存在的时候忽略。用来进行亮度数据的归一化,可选,默认None。alpha标量,0-1之间,可选,默认None。linewidths标记点的长度,默认None。

例子

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
x=np.random.rand(20)
y=np.random.rand(20)

area=(50*np.random.rand(20))**2

plt.scatter(x,y,s=area,alpha=0.5)
plt.show()

更新 Django 3.2 解决 DEFAULT_AUTO_FIELD warnings

plt.legend()函数

1.设置图例的位置

plt.legend(loc=' ')

2.设置图例字体大小

fontsize : int or float or {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'}

3.设置图例边框及背景

plt.legend(loc='best',frameon=False)
plt.legend(loc='best',edgecolor='blue')
plt.legend(loc='best',facecolor='blue')

4.设置图例标题

legend = plt.legend(["BJ", "SH"], title='Beijing VS Shanghai')

plt.plot(["BJ", "SH"],loc='upper left',title='Beijing VS Shanghai')

5.设置图例名字及对应关系

legend = plt.legend([p1, p2], ["BJ", "SH"])

示例

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0,10,1)
plt.plot(x,x,'r--',x,np.cos(x),'g--',marker='*')
plt.xlabel('row')
plt.ylabel('cow')
plt.legend(["BJ","SH"],loc='upper left',loc='upper left')
plt.show()

运行结果

更新 Django 3.2 解决 DEFAULT_AUTO_FIELD warnings

Original: https://blog.csdn.net/qq_43186282/article/details/121513266
Author: Sunny.T
Title: plt.plot(),plt.scatter(),plt.legend函数的用法介绍

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/290811/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总