zoukankan      html  css  js  c++  java
  • django定义模型类-14

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

    模型类继承自 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  上传路径
    
  • 相关阅读:
    javascript package的一种简单"优雅"实现
    高效、快速、专业的外科手术团队
    贝塞尔曲线
    经典格斗游戏《街头霸王》的Javascript实现
    该死的痘痘
    同步/异步与阻塞/非阻塞的区别
    Shell echo用法
    凹凸Linux面试题
    VMware Workstation 9下安装Fedora 18教程(转)
    Linux中locale 详解(转)
  • 原文地址:https://www.cnblogs.com/mxuanli/p/9871240.html
Copyright © 2011-2022 走看看