目录

django的模型类定义在应用下的 models.py 文件中。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

模型类继承自 django.db.models 包下的 Model 类。

新创建应用 book ,我们将在此应用下做演示。

python manage.py startapp book

1. 定义

以 ‘图书-角色’为例创建模型类

from django.db import models


class Book(models.Model):
    b_title = models.CharField(max_length=20, verbose_name="标题")
    b_pub_date = models.DateField(verbose_name="发布日期")
    b_read = models.IntegerField(default=0, verbose_name="阅读数")
    b_comment = models.IntegerField(default=0, verbose_name="评论数")
    is_delete = models.BooleanField(default=False, verbose_name="逻辑删除")

    class Meta:
        db_table = "book"
        verbose_name = "书籍"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.b_title


class Role(models.Model):
    GENDER_CHOICES = (
        (0, 'female'),
        (1, 'male')
    )
    r_name = models.CharField(max_length=20, verbose_name="角色名称")
    r_gender = models.SmallIntegerField(choices=GENDER_CHOICES, verbose_name="性别", default=0)
    r_describe = models.CharField(max_length=200, verbose_name="描述信息", null=True)
    r_book = models.ForeignKey(Book, on_delete=models.CASCADE, verbose_name="书籍")
    is_delete = models.BooleanField(default=False, verbose_name="逻辑删除")

    class Meta:
        db_table = "role"
        verbose_name = "角色"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.r_name
  • db_table 指定数据表名字,如果未指明,将会以小写 应用名+模型类名 为数据表名字。
  • verbose_name 指定在 admin 站点中显示的名字
  • 如果没设置主键,django会自动生成一个自动增长的主键列。如果设置了主键,django不会再自动生成。

  • 属性命名限制
    • 不能是python的保留关键字。
    • 不允许使用连续的下划线,这是由django的查询方式决定的。
    • 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
    字段名 = models.类型名(约束)

定义模型类基本格式如下:

from django.db import models


class 类名(models.Model):
    字段名 = models.类型名(约束)
    
    class Meta:
        db_table = "表名"
        verbose_name = admin中显示名字
        verbose_name_plural = admin中显示名字复数

字段类型

django-ORM的基本字段类型

1、models.AutoField  自增列 
如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
  
2、models.CharField  字符串字段
必须 max_length 参数
  
3、models.BooleanField  布尔类型
不能为空,Blank=True
 
4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
  继承CharField,所以必须 max_lenght 参数
 
5、models.DateField  日期类型 date
  对于参数,auto_now = True 则每次更新都会更新这个时间;
  auto_now_add 则只是第一次创建添加,之后的更新不再改变。
  
6、models.DateTimeField  日期类型 datetime
  同DateField的参数
  
7、models.Decimal  十进制小数类型 = decimal
  必须指定整数位max_digits和小数位decimal_places
  
8、models.EmailField  字符串类型(邮箱格式)
  对字符串进行正则表达式验证
  
9、models.FloatField  浮点类型 = double

10、models.IntegerField  整形

11、 整形范围

  integer_field_ranges = {
    'SmallIntegerField': (-32768, 32767),
    'IntegerField': (-2147483648, 2147483647),
    'BigIntegerField': (-9223372036854775808, 9223372036854775807),
    'PositiveSmallIntegerField': (0, 32767),
    'PositiveIntegerField': (0, 2147483647),
  }
  
12、models.IPAddressField  字符串类型(ip4格式)

13、models.GenericIPAddressField  字符串类型(ip4或ip6格式)

  参数protocol可以是:both、ipv4、ipv6
  验证时,会根据设置报错
  
14、models.NullBooleanField  允许为空的布尔类型

15、models.PositiveIntegerFiel  正Integer

16、models.PositiveSmallIntegerField  正smallInteger

17、models.SlugField  减号、下划线、字母、数字

18、models.SmallIntegerField  数字

  数据库中的字段有:tinyint、smallint、int、bigint
  
19、models.TextField  字符串=longtext

20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]

21、models.URLField  字符串,地址正则表达式

22、models.BinaryField  二进制

23、models.ImageField   图片  在数据库中保存的是文件的路径

24、models.FilePathField 文件

约束类型

1、null=True
  数据库中字段是否可以为空
  
2、blank=True
  django的 Admin 中添加数据时是否可允许空值
  
3、primary_key = False
  主键,对AutoField设置主键后,就会代替原来的自增 id 列
  
4、auto_now 和 auto_now_add
  auto_now   自动创建---无论添加或修改,都是当前操作的时间
  auto_now_add  自动创建---永远是创建时的时间
  
5、choices  枚举

GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )
    
    r_gender = models.SmallIntegerField(choices=GENDER_CHOICES)

6、max_length   最大长度

7、default  默认值

8、verbose_name  Admin中字段的显示名称

9、name|db_column  数据库中的字段名称

10、unique=True  不允许重复

11、db_index = True  数据库索
引
12、editable=True  在Admin里是否可编辑

13、error_messages=None  错误提示

14、auto_created=False  自动创建

15、help_text  在Admin中提示帮助信息

16、validators=[]

17、upload-to  上传路径
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄