使用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中提供,我们也可以直接继承。

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 中,`update_or_create` 是 `QuerySet` 对象的一个方法,用于更新现有记录或创建新记录。 该方法的使用方式如下: ```python obj, created = MyModel.objects.update_or_create(defaults={}, **kwargs) ``` 其中: - `MyModel` 是你的模型。 - `defaults` 是一个字典,用于指定要更新或创建的字段及其对应的值。 - `kwargs` 是一个字典,用于指定用于匹配现有记录的查询条件。 该方法的返回值是一个包含两个元素的元组: - `obj` 是更新或创建的模型对象。 - `created` 是一个布尔值,指示是否创建了新记录。如果创建了新记录,则为 `True`;如果更新了现有记录,则为 `False`。 下面是对 `update_or_create` 方法的详细解释: 1. 首先,根据提供的查询条件(`kwargs`),尝试在数据库中查找匹配的记录。 2. 如果找到匹配的记录,则使用提供的 `defaults` 字典中的值来更新这条记录。 3. 如果未找到匹配的记录,则根据提供的查询条件和 `defaults` 字典中的值创建一条新记录。 这个方法适用于以下场景: - 当你想更新现有记录,但又不确定该记录是否存在,可以使用该方法。它会自动检查是否存在匹配的记录,并根据需要进行更新。 - 当你想创建新记录,但又要确保不会创建重复的记录,也可以使用该方法。它会检查是否存在匹配的记录,如果不存在,则创建新记录。 注意事项: - `defaults` 字典中的键是模型字段的名称,对应的值是要更新或创建的字段值。 - `kwargs` 字典中的键是用于匹配现有记录的查询条件,可以使用模型字段名和其对应的值进行匹配。 这是关于 Django 的 `update_or_create` 方法的详细说明,希望能帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值