当您在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> 左三角标记…等等<!--'<-->
**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()

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()

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()
运行结果

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/
转载文章受原作者版权保护。转载请注明原作者出处!