0


使用Django定义模型类字段时常用字段详解

首先要知道的是在定义好下述字段之后要在终端输入这两行命令执行迁移生成表喔~

python .\manage.py makemigrations
python .\manage.py migrate
1.models.CharField()

是django中最常见的字段, 用于存储字符串类型的数据

适用于定义名字/电话/地址/国家等等

  name = models.CharField(verbose_name='联系人', max_length=20)
2.models.TextField()

同样是django中的用于存储字符串类型的数据, 既然同是存储数据,那和CharField()有没有区别呢?

答案当然是有的啦~

A. 最大长度:CharField需要指定一个最大长度(max_length),用于定义数据库字段的长度。这是必需的。相反,TextField不需要最大长度参数。

B. 存储和检索效率:通常,如果你知道文本数据的长度将在一个相对较小的范围内,那么使用CharField可能更有效,因为数据库可以优化固定长度的字段的存储和检索。如果你需要存储大量的文本,如文章或评论,那么TextField可能更合适。

C. 用途:CharField通常用于较短的字符串,如名称、标题、城市等,而TextField通常用于较长或无限制长度的字符串,如博客文章、评论、描述等。

D. 表单渲染:在Django的表单中,CharField通常呈现为<input type="text">,而TextField呈现为<textarea>。这对用户输入数据的方式有很大影响

3.models.AutoField()

AutoField()的作用是默认生成列名为id的列,并设置为主键,常用于定义用户id,因为作为主键所以primary_key也成了他的必备参数,定义时切记不可忘记传入此参数。

当然主键django会默认自带

user_id = models.AutoField(primary_key = True)
4.models.BooleanField()

顾名思义,BooleanField()是django中的布尔类型字段, 常用于定义一个物品或者信息的状态。

例如商品是否被选中, 填写的地址电话号码是否为默认状态。

is_default = models.BooleanField(verbose_name='是否为默认地址', default=False)
5.models.DateField()

DateField()是django中的日期类型的字段

他与python里的datetime.date实例相同 不包含具体的时分秒 以天为单位计算时间。

值得注意的是他的两个参数:

参数1: auto_now,默认值为false,设置为true时,每次执行 save 操作时,将其值设置为当前时间,并且每次修改model,都会自动更新。

使用场景: 这个参数在需要存储“最后修改时间”的场景下,十分方便。 注意: 设置该参数为true时,并不意味着字段的默认值设为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django自带的admin管理器,那么该字段在admin中是只读的。

参数2: auto_now_add,默认值为false,设置为true时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。 使用场景: 该属性通常被用在存储“创建时间”的场景下。 注意: 一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。 auto_now和auto_now_add被设置为True后,这样做会导致字段成为editable=False和blank=True的状态。editable=False将导致字段不会被呈现在admin中,blank=Ture表示允许在表单中不输入值。

creat_time = models.DateField(auto_now_add=True, verbose_name='用户创建时间')
6.models.DateTimeField()

DateTimeField()是django中的日期+时间类型的字段

他的参数特性与DateField()相同,区别就是他会多出一个时间参数,更加具体。

因此就导致了他们使用场景的不同。

好比DateField()常用于定义用户创建时间,而DateTimeField()就常用于定义好比验证码生成的时间,因为验证码进行操作的时候几乎都是以秒或者分钟为单位,这个时候就用到了DateTimeField()

code_creat_time = models.DateField(auto_now_add=True, verbose_name='验证码生成时间')
7.models.DecimalField()

django中的十进制小数类型字段

必备参数:最大位数max_digits = 10 和小数位decimal_places = 2

常用于定义商品价格

price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品价格')
8.models.EmailField()

django中的电子邮箱字段 必须是email类型的数据

email = models.EmailField()
9.models.FloatField()

浮点类型字段,和DecimalField()类似,应用时要规定他的最大位数和小数位

数据类型为 float

floatNum = models.FloatField(max_digits = 10,decimal_places = 2)
10.models.IntegerField()

整数类型字段

数据类型为 int

intNum = models.IntegerField()
11.models.IPAddressField()

django中的IP字段,同EmailField类似。他存储的必须是IP类型的数据

Django Admin以及ModelForm中提供验证 IPV4 机制

IP = models.IPAddressField()
12.models.GenericIPAddressField()

与IPAddressField(),但是他的字段存储类型是可供选择的,它会根据必备参数:***protocol (both,ipv4,ipv6)***中的参数判断。

IP = models.GenericIPAddressField(protocol = both)
13.models.SlugField()

django中存储字符串类型的字段,但是字段必须包含减号、下划线、字母、数字,适用于复杂密码的定义

hardPassword = models.SlugField()
14.models.URLField()

django中存储url链接类型的字段,相似于IPAddressField(),保存字段必须为url类型

url = models.URLField()
15.models.ImageField()

django中图片类型的字段 作用是将图片保存为图片地址的形式,应用较为广泛。

image = models.ImageField()
16.models.FilePathField()

文件地址类型的字段,可以根据地址选择匹配文件。

必备的参数是path(文件的绝对路径)

file = models.FilePathField(path='绝对路径')
17.models.FileField()

文件上传功能字段

必备的参数是upload_to(文件的绝对路径)

file = models.FileField(upload_to='绝对路径')
18.models.PhoneNumberField()

11位电话号码字段

与CharField()添加了校验电话号码的功能,不过再目前的开发当中,电话号码的校验逻辑并不复杂,开发者大可以通过正则匹配在相应的视图函数中去校验手机号码,所以字段的使用也就较少了。

phone = models.PhoneNumberField()
19.总结

相信大家再掌握以上字段并熟悉他们的相关参数以后对定义模型类字段的书写就已经并不会感到困难了,但是实际开发中我们还是需要根据实际情况去进行变通。

例如我们在开发一个比较大的项目当中,可能不同的模型类中会出现多个相同的字段,届时我们就可以定义一个抽象类公共的字段,然后让不同的模型去继承它。(值得注意的是,抽象模型在执行迁移文件的时候是不会在数据库中生成表的)

当然相对于十分常见的字段,django也在AbstractUser中提供,我们也可以直接继承。

标签: django

本文转载自: https://blog.csdn.net/weixin_74452504/article/details/135868236
版权归原作者 Xwpphh 所有, 如有侵权,请联系我们删除。

“使用Django定义模型类字段时常用字段详解”的评论:

还没有评论