首页 > 其他分享 >django model 创建表参数字段

django model 创建表参数字段

时间:2023-01-18 15:24:36浏览次数:45  
标签:name models max django length 参数 CharField model True

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

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

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

比如下面这个 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 1. default 1. blank=True/False 1. primary_key 1. unique 1. verbose_name 1. db_index 1. auto_now 1. auto_now_add 1. 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,
    )

标签:name,models,max,django,length,参数,CharField,model,True
From: https://www.cnblogs.com/TestingShare/p/17059871.html

相关文章

  • Django[二] 创建一个新的项目
    IDE:PyCharm2021.3.1(ProfessionalEdition)1.在开始界面中创建一个NewProject  如果是专业版(可能需要安装完Django),可以看到这个Django选项。  创建完成......
  • Django[一]安装和配置
    日期:2023年1月18日python版本:python3.10.0Django版本:4.1.51.pip安装:在安装完Python并配置完环境变量的提前下,在cmd窗口直接执行:pipinstalldjango   2.验......
  • Django一个“高质量”小白的学习之路
    人类的思维倾向于直白、视觉和线性,还有好奇心,这是祖先遗传下来的思维习惯。如果论结果,显然我是一个计算机学习的失败者。因为我作为一个已经刚到不惑之年的中年男子,还在......
  • jmeter添加全局变量,跨线程组传递参数
    在软件测试中,当我们想把某个变量值想设置为全局变量,也就是在任何一个线程组都可以使用该变量时,我们就要用到BeanShell取样器,示例如下:1.拿到某个接口的变量值2.通过BeanSh......
  • Maximum Entropy Model最大熵模型
    ​​WelcomeToMyBlog​​​最大熵模型(MaximumEntropyModel)属于对数线性模型,由最大熵原理推导实现.最大熵原理最大熵原理是概率模型学习的一个准则.最大熵原理认......
  • IDEA:自动生成方法注释并添加 @param 参数(Java+Kotlin)
    在用 Java 或 Kotlin 编写方法时建议编写完善的注释,包含每个参数的意义和返回的内容,下面介绍在 IDEA 中自动生成方法注释的技巧。    第二张图按照图片填写......
  • django-rest-swagger
    Swagger是一个API开发者的工具框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体目标是使客户端和文件系统服务器以同样的速度来更新,方法,参数和模型紧密集成到......
  • Django接入Swagger,生成Swagger接口文档-操作解析
        Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体目标是使客户端和文件系统源代码作为服务器以同样的速度来更新。当......
  • EXPDP之INCLUDE参数解析
    文档课题:EXPDP之INCLUDE参数解析.应用场景:将A库某schema中的部分表导入到B库某schema中.语法如下:1INCLUDE=object_type[:name_clause][,...]测试过程:数据库:oracle11.2.......
  • django4.1版本小demo
    1.安装anoconda,创建虚拟python3.9环境2.安装django,pipinstalldjango-i清华源安装较快3.新建一个django项目django-adminstartprojectdemo14.创建单个或者多......