zoukankan      html  css  js  c++  java
  • 02.定义模型

    01.定义模型举例

    • 模型类被定义在"应用/models.py"文件中。
    • 模型类必须继承自Model类,位于包django.db.models中。
    from django.db import models
    
    #定义图书模型类BookInfo
    class BookInfo(models.Model):
        btitle = models.CharField(max_length=20, verbose_name='名称')
        bpub_date = models.DateField(verbose_name='发布日期')
        bread = models.IntegerField(default=0, verbose_name='阅读量')
        bcomment = models.IntegerField(default=0, verbose_name='评论量')
        is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    
        class Meta:
            db_table = 'tb_books'  # 指明数据库表名
            verbose_name = '图书'  # 在admin站点中显示的名称
            verbose_name_plural = verbose_name  # 显示的复数名称
    
        def __str__(self):
            """定义每个数据对象的显示信息"""
            return self.btitle
    
    #定义英雄模型类HeroInfo
    class HeroInfo(models.Model):
        GENDER_CHOICES = (
            (0, 'female'),
            (1, 'male')
        )
        hname = models.CharField(max_length=20, verbose_name='名称') 
        hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')  
        hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息') 
        hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')  # 外键
        is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    
        class Meta:
            db_table = 'tb_heros'
            verbose_name = '英雄'
            verbose_name_plural = verbose_name
    
        def __str__(self):
            return self.hname

    02.源信息Meta

    from django.db import models
    
    class UserInfo(models.Model):
            username = models.CharField(max_length=32)
            password = models.CharField(max_length=32)
            class Meta:
                #1 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
                db_table = "table_name"     #自己指定创建的表名
    
                #2 Django Admin 中显示的表名称
                verbose_name='user'          #在Django admin后台显示时表名是users
    
                #3 verbose_name加s
                verbose_name_plural='user'  #若果这个字段也是user那么4中表名才显示user
    
                #4 联合唯一索引
                unique_together = (("name", "password"),)
    
                #5 联合索引   (缺点是最左前缀,写SQL语句基于password时不能命中索引,查找慢)
                #  如:select * from tb where password = ‘xx’    就无法命中索引
                index_together = [
                    ("name", "password"),
                ]
    # 更多:https://docs.djangoproject.com/en/1.10/ref/models/options/

    03.字段

     3.1 常用字段

    from django.db import models
    
    class UserGroup(models.Model):
        uid = models.AutoField(primary_key=True)
    
        name = models.CharField(max_length=32,null=True, blank=True)
        email = models.EmailField(max_length=32)
        text = models.TextField()
    
        ctime = models.DateTimeField(auto_now_add=True)      # 只有添加时才会更新时间
        uptime = models.DateTimeField(auto_now=True)         # 只要修改就会更新时间
    
        ip1 = models.IPAddressField()               # 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
        ip2 = models.GenericIPAddressField()           # 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
    
        active = models.BooleanField(default=True)
    
        data01 = models.DateTimeField()              # 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ
        data02 = models.DateField()                 # 日期格式      YYYY-MM-DD
        data03 = models.TimeField()                 # 时间格式      HH:MM[:ss[.uuuuuu]]
    
        age = models.PositiveIntegerField()           # 正小整数 0 ~ 32767
        balance = models.SmallIntegerField()          # 小整数 -32768 ~ 32767
        money = models.PositiveIntegerField()         # 正整数 0 ~ 2147483647
        bignum = models.BigIntegerField()           # 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807
        
        user_type_choices = (
            (1, "超级用户"),
            (2, "普通用户"),
            (3, "普普通用户"),
        )
        user_type_id = models.IntegerField(choices=user_type_choices, default=1)

    3.2 不常用字段

    URLField(CharField)
        - 字符串类型,Django Admin以及ModelForm中提供验证 URL
    
    SlugField(CharField)
        - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
    
    CommaSeparatedIntegerField(CharField)
        - 字符串类型,格式必须为逗号分割的数字
    
    UUIDField(Field)
        - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
    
    FilePathField(Field)
        - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
        - 参数:
                path,                      文件夹路径
                match=None,                正则匹配
                recursive=False,           递归下面的文件夹
                allow_files=True,          允许文件
                allow_folders=False,       允许文件夹
    
    FileField(Field)
        - 字符串,路径保存在数据库,文件上传到指定目录
        - 参数:
            upload_to = ""      上传文件的保存路径
            storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
    
    ImageField(FileField)
        - 字符串,路径保存在数据库,文件上传到指定目录
        - 参数:
            upload_to = ""      上传文件的保存路径
            storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
            width_field=None,   上传图片的高度保存的数据库字段名(字符串)
            height_field=None   上传图片的宽度保存的数据库字段名(字符串)
    
    
    DurationField(Field)
        - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
    
    FloatField(Field)
        - 浮点型
    
    DecimalField(Field)
        - 10进制小数
        - 参数:
            max_digits,小数总长度
            decimal_places,小数位长度
    
    BinaryField(Field)
        - 二进制类型

    04.参数

    选项 说明
    null 如果为True,表示允许为空,默认值是False
    blank 如果为True,则该字段允许为空白,默认值是False
    db_column 字段的名称,如果未指定,则使用属性的名称
    db_index 若值为True, 则在表中会为此字段创建索引,默认值是False
    default 默认
    primary_key 若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用
    unique 如果为True, 这个字段在表中必须有唯一值,默认值是False
    related_name 在关联查询中,代替单一对象查找多对象 对象名小写_set(book.heroinfo_set.all() 的写法
    auto_now_add 只在数据添加的时候,记录时间
    auto_now 数据添加和更新的时候,记录时间
  • 相关阅读:
    activity 之间传递参数
    手动创建一个Activity,完成页面跳转(intent 无参数)
    C++中汉字字符串的截取
    android基础知识清单。
    更改远程仓库
    设计模式六大原则
    事件订阅代码
    Python Mac ssl.SSLError certificate verify failed (_ssl.c:833)
    Python库中常见的 __all__ 变量是干啥的
    Thrift的使用-Python
  • 原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/14788993.html
Copyright © 2011-2022 走看看