Django笔记四之字段选项

 这是Django系列笔记的第四篇,文章内容均为本人通过阅读Django官方文档后整理所得,可用作新手入门指南,或者个人知识点查阅。



这篇笔记介绍的 field options,也就是 字段的选项。


首先,关于 model,是数据库与 Python 代码里的一个映射关系,每一个 model 是django.db.models.Model 的一个子类。


model 里每一个属性值(即字段)代表数据库的字段,通过 定义 models.py 里的 class,可以自动生成数据库里的表和字段,比如之前的 Question。


主键 id 字段如果不手动设置都会默认创建。


比如下面这个 model,我们将以此为例介绍各个字段的属性值:

class Question(models.Model):    SiZES = [        ('S', 'small'),        ('M', 'medium'),        ("L", 'large'),    ]    question_text = models.CharField(verbose_name="问题文字", max_length=200, help_text="question_text")    pub_date = models.DateTimeField('日期')    test_blank_char = models.CharField(blank=True, max_length=100)    size = models.CharField(max_length=10, choices=SiZES)


目录大致如下:

  1. null=True/False

  2. default

  3. blank=True/False

  4. primary_key

  5. unique

  6. verbose_name

  7. db_index

  8. auto_now

  9. auto_now_add

  10. choices


01

null=True/False


是否允许字段在数据库的字段为 null。


这个字段一般可以和下面的 default 默认值配合使用



02

default

字段的默认值


有时候创建一条数据的时候,指定了其他字段的值,该字段不指定,那么系统就会给这个字段赋值为 default 的值,可以是 任意值,比如整型,字符型,日期,以及 None。

比如下面的model:

class Question(models.Model):    name = models.CharField(max_length=20, default='')    pub_date = models.DateField()

创建一条数据:

Question.objects.create(pub_date="2022-01-01")


创建数据的时候没有指定 name 的值,而我们设置了 default 为 空字符串,那么系统创建这条数据的时候,就会默认为 该字段赋值为 ”


而如果我们设置了 default=None,表示默认为 null(数据库的空值),系统会报错,因为字段一般默认是不允许为空的,所以我们需要和 null=True 配合使用,示例如下:

class Question(models.Model):    name = models.CharField(max_length=20, default=None, null=True)    pub_date = models.DateField()

那么当我们创建一条数据的时候,如果不指定 name 的值,name 字段在数据库中就会默认为 null 了。


03

blank=True/False


blank 是空白,表示空字符串,字段是否允许为空字符串



04

primary_key

是否为主键


因为我们创建表的时候,比如上面那个 Question,一般不设置主键 id,系统为自动默认为我们创建一个主键为 id 的自增的整型数据。



05

unique

唯一约束


设置为 unique=True 后,该表会为该字段中建立一个唯一索引,该字段数据在该表中就只能是唯一的了,不可创建相同内容的数据了,否则会报错。

class Question(models.Model):    name = models.CharField(max_length=20, unique=True)    pub_date = models.DateField()


比如我们创建了一条数据,name 的值为 ‘hunter’,然后再创建一条 name 为 ‘hunter’ 的数据,系统就会报错。



06

verbose_name


name = models.CharField(max_length=20, default=None, null=True, verbose_name='名称')


字段注释,除了可用于用户的查看理解字段含义,还可在 admin 页面数据该字段的标题显示(admin后台管理页面后续会开一篇笔记介绍)



07

db_index

索引


设置字段的这个参数为 True,然后运行 makemigrations 和 migrate 会为数据库的该字段创建索引

name = models.CharField(max_length=20, default=None, null=True, verbose_name='名称', db_index=True)



08

auto_now


常用于日期字段,每次更改该数据行的字段的内容时,该字段会自动更新为当前时间,常用于 updated_time 字段


示例:

updated_time = models.DateTimeField(auto_now=True)


09

auto_now_add


常用于日期字段,每次创建该数据行数据之后,该字段会被自动填入当前时间,且之后更改数据时不会变化,常用于 created_time 字段


示例:

created_time = models.DateTimeField(auto_now_add=True)


10

choices


字段可选值


常用于某个字段的只能选择特定的几个值的情况下,比如状态为 成功,失败,待处理这种。


下面是一个使用示例:

class Question(models.Model):    SiZES = [        ('S', 'small'),        ('M', 'medium'),        ('L', 'large'),    ]    question_text = models.CharField(verbose_name="问题文字", max_length=200)    pub_date = models.DateTimeField('日期')    test_blank_char = models.CharField(blank=True, max_length=100)    size = models.CharField(max_length=10, choices=SiZES)

系统在保存的时候 使用的是 choices 中每一个元素的第一个值,也就是 SIZES 里的 ’S’ ‘M’, ‘L’


如果在项目中想要获取该字段对应的全称,可以使用 get_field_display() 方法,其中,field 为我们定义的字段名


比如在上面的 model 里,是 get_size_display()


官方的做法是 在 model 的类里面,定义一个 CHOICES,然后定义对于每个值定义一个合适的常量



以下是官方的一个示例:


class Student(models.Model):    FRESHMAN = 'FR'    SOPHOMORE = 'SO'    JUNIOR = 'JR'    SENIOR = 'SR'    GRADUATE = 'GR'    YEAR_IN_SCHOOL_CHOICES = [        (FRESHMAN, 'Freshman'),        (SOPHOMORE, 'Sophomore'),        (JUNIOR, 'Junior'),        (SENIOR, 'Senior'),        (GRADUATE, 'Graduate'),    ]    year_in_school = models.CharField(        max_length=2,        choices=YEAR_IN_SCHOOL_CHOICES,        default=FRESHMAN,    )


以上就是本篇笔记全部内容,主要介绍的是字段里的选项,下一篇笔记将介绍字段的类型,比如 IntegerField, CharField等等


以上就是本篇文章所有内容,如果感兴趣,可以长按下方二维码扫描关注后续…

Django笔记四之字段选项



原文始发于微信公众号(Hunter后端):Django笔记四之字段选项

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/178930.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!