首页 > 其他分享 >Django笔记四之字段属性

Django笔记四之字段属性

时间:2023-03-21 23:02:31浏览次数:54  
标签:name models max 笔记 Django length CharField 四之字 True

这篇笔记介绍的 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

1、null=True/False

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

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

2、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 了。

3、blank=True/False

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

4、primary_key

是否为主键

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

5、unique

唯一约束

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

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

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

6、verbose_name

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

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

7、db_index

索引

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

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

8、auto_now

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

示例:

updated_time = models.DateTimeField(auto_now=True)

9、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笔记四之字段选项

本文首发于本人微信公众号:Django笔记。

如果想获取更多相关文章,可扫码关注阅读:

标签:name,models,max,笔记,Django,length,CharField,四之字,True
From: https://www.cnblogs.com/hunterxiong/p/17241947.html

相关文章

  • jenkins学习笔记之十五:SonarSQube API使用
    本章主要通过SonarSQubeAPI在pipeline第一次执行时就指定自定义的质量配置和质量阈API 文档:http://192.168.1.134:9000/web_api一、编写sonarAPI(sonarapi.groovy)注......
  • 字符串哈希笔记
    目录字符串哈希1.定义1.1Hash的思想1.2Hash的计算和改进1.3自己的常用实现2.代码实现2.1暴力版本:2.2字符串前缀和哈希参考文档字符串哈希1.定义一个把字符串映......
  • [学习笔记] CDQ分治
    引入-分治分治,就是将讲原问题不断细分直到规模小到能够解决,然后一层层向上合并得到答案的过程。归并排序大致思想:把序列拆成左右两部分,分别归并排序,然后使用两个指针......
  • 学习记录:day03笔记
    一、数据类型为什么要对数据进行分类?1、现实中的数据就是自带类别属性的2、对数据进行分类可以节约内存存储空间、提高运行速度存储空间的单位:Bit比特存储1个......
  • 学习记录:day04笔记
    一、for循环语句循环:就是一种让代码反复执行的方式,从而达到想要的效果for循环一般会使用一个变量来引导循环的进行,这一变量叫做该循环的循环变量iindexfor循环的变......
  • 学习记录:day05笔记
    一、数组什么是数组:变量的组合,是一种批量定义相同类型变量的方式定义:类型名数组名[数量];intarr[5];注意:数组的内存空间是连续分配的,且数组的长度一旦确定就无......
  • 构建之法阅读笔记1
    一、我过去是怎么做的  过去,刚开始学C时,我还不知道这些编程语言能干什么用,而且老师也只是只讲课本知识,动手实践很少,导致现在回想大一时并没有什么收获可以回味。加上......
  • 学习记录:day06笔记
    一、Window下获取方向键1、导入头文件#include<conio.h>2、通过getch()获取键盘上的键值上:72下:80左:75右:77 二、Linux下获取方向键:1、在Window中把getch.h文......
  • 学习记录:day07笔记
    进制转换1、为什么使用二进制、八进制、十六进制?因为目前CPU只能识别高低两种电平,只能对二进制数据进行计算二进制虽然能够直接别计算机识别但是不方便人去书写和记......
  • django-rest-framework-从零开始-9-视图类ModelViewSet的使用
    django-rest-framework-从零开始-9-视图类ModelViewSet的使用1、前言在之前(django-rest-framework-从零开始-7-通用的视图类的使用),我们通过简单几步,就可以创建出简单CRUD......