ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

14 DjangoModel

2022-08-11 14:34:15  阅读:155  来源: 互联网

标签:DjangoModel 14 数据库 对应 null True price name


Django数据库

1 Django数据库类创建

1-1 Meta元数据

class Note(model.Model):
    deleted = models.BooleanField(verbose_name='已删除', default='False')
    
    class Meta:
        abstract = True  

class xxx1(Note):
    pass

Django在生成表时,不会生成Note表,因为它有abstract = True

继承Note的类的类,就会把deleted字段继承。

class Books(models.Model):
    """图书类"""
    name = models.CharField(max_length=20)
    price = models.PositiveSmallIntegerField()
    word_num = models.PositiveIntegerField()
 
    class Meta:
        abstract = True  # 当该参数设置为True时表示该模型类是一个基类,提供给其他模型类继承,因此该基类不会在数据库中生成数据表。
        
        app_label = "app_name"  # 该参数是用于当我们没有在INSTALLED_APPS中注册app时,需要用该参数来说明该模型类属于哪个app。
        
        db_table = "books"  # 该参数表示该模型类在数据库中生成的数据表的表名。
        
        get_latest_by = "price"  # 该参数定义了当我们使用latest()和earliest()方法时是通过什么字段来进行排序的。
        
        managed = True  # 该参数默认值为True,表示Django将按照既定的规则,管理数据库表的生命周期。如果设置为False,将不会针对当前模型创建和删除数据库表.
        
        ordering = ["price"]  # 该参数表示按照什么字段排序,目前表示按照price升序排序,如需要降序,则在字段名前加一个负号["-price"],同时可以添加多个排序选项,如["price", "word_num"]表示先按照price升序排序,然后price相同的再按照word_num升序排序。
        
        permissions = (("allow_update", "允许更新图书"),)  # 该参数用于当创建对象时增加额外的权限。它接收一个所有元素都是二元元组的列表或元组,每个元素都是(权限代码, 直观的权限名称)的格式
        
        indexes = [models.Index(fields=['name', 'price']), name='idx_name_price']  # 该参数表示要在模型上定义的索引列表,用于在数据库中创建联合索引。
        
        unique_together = (("name", "price"),)  # 该参数表示联合唯一约束,参数值可以是一维的,也可以是二维的,我这里是用二维的举例,当前表示该表中不能出现name和price都相同的书籍出现,该参数可以设置多组联合唯一约束,另外,如果约束只有一组的情况下可以用一维表示。
        
        verbose_name = "图书"  # 该参数可以设置模型直观的名称,一般我们设置为中文,如果不设置,那么Django会默认使用小写的模型名。
        
        verbose_name_plural = verbose_name  # 该参数是verbose_name的复数形式,由于中文没有复数的概念,所以一般verbose_name_plural = verbose_name。
        
        constraints = [
            models.UniqueConstraint(fields=['name','price'], name='uni_name_price')
        ]  # 该参数表示联合唯一索引

2 Django数据库表字段类型

2-1 数值型

  • AutoField对应int(11)。自增主键,Django Model默认提供,可以被重写。

  • BooleanField对应tinyint(1)。布尔类型字段,一般用于记录状态标记。

  • DecimalField对应decimal。开发对数据精准要求较高大的业务时考虑使用。比如:cash=models.DecimalField(max_digits=8, decimal_places=2, default=0, verbose_name=“消费金额”),就是定义长度为8位、精度位2位的数字,例如数字:666666.66。

  • IntergerField对应**int(11) **。同AutoField一样,唯一的差别就是不自增。

    通常与choices连用。

    
    
  • PositiveIntegerField。同IntegerField,只包含正整数。

  • SmallIntegerField对应smallint。小整数时一般会用到。


2-2 字符型

django对应到Mysql中有两种类型:longtext和varchar。

除了TextField是longtest类型外,其他属于varchar类型。

  • CharField对应varchar。基础的varchar类型。
  • URLField.继承自CharField,但是实现了对URL特特殊处理。用来存储URL数据,非URL数据可以在业务层就拒绝掉,不会存入数据库中。
  • UUIDField对应char(32)。除了在PostgreSQL中使用的是uuid类型外,在其他数据库中均是固定长度char(32),用来存放生成的唯一id。
  • EmailField。同URLfield一样继承自CharField,多了对email的特殊处理。
  • FileField。同URLField一样,它继承自CharField,对了对文件的特殊处理。
  • TextField对应longtext。一般用于存放大量文本内容,比如新闻正文、博客正文。
  • ImageField。继承自FileField,用来处理图片相关的数据,在展示上会有所不同。

2-3 日期型

django中有3中日期类型,分别对应Mysql的date、datetime和time

  • DateField对应date
  • DateTimeField对应datetime
  • TimeField对应time

2-4 参数

上面django所提供的字段都是类。

比如models.CharField的定义就是:class CharField:。

每个字段里面都提供了参数可以选择:

  • null。可以同blank进行对比。null用于设定在数据库层面是否允许为空
  • blank。针对业务层面,该值是否允许为空。
  • choices。配置字段的choices后,在admin页面上就可以看到对应的可选项展示。
  • db_column。默认情况下,定义的field就是对应数据库中的字段名称,通过这个参数可以指定Model中的某个字段对应数据库中的哪个字段。
  • db_index。数据库索引配置。
  • default。默认值配置。
  • editable。是否可编辑,默认是True。如果不想这个字段显示在页面上,可以配置为False。
  • error_messages。用来自定义字段值校验失败时的异常提示,它是字典格式。key的值可选项为null、blank、invalid、invalid_choice、unique和unique_for_date。
  • help_text。字段提示语,配置这一项后,在页面对应字段的下方会展示此配置。
  • primary_key。主键,一个Model只允许设置一个字段为primary_key。
  • unique。唯一约束,当需要配置唯一值时,设置unique=True,设置此项后,不需要设置db_index。
  • unique_for_date。针对date(日期)的联合约束。比如说一天只能写一篇博文,即:unique_for_date=“博文”
  • unique_for_month。针对月份的联合约束 。
  • unique_for_month。针对年份的联合约束。
  • verbose_name。字段对应的展示文案。
  • validators。自定义校验逻辑,同form类似。

3 Django字段blank和null的区别

blank

设置为True时,字段可以为空。设置为False时,字段是必须填写的。字符型字段CharField和TextField是用空字符串来存储空值的。

如果为True,字段允许为空,默认不允许。

null

设置为True时,django用Null来存储空值。日期型、时间型和数字型字段不接受空字符串。所以设置IntegerField,DateTimeField型字段可以为空时,需要将blank,null均设为True。

如果为True,空值将会被存储为NULL,默认为False。

如果想设置BooleanField为空时可以选用NullBooleanField型字段。

一句话概括

  • null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空。
  • blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填,比如 admin 界面下增加 model 一条记录的时候。直观的看到就是该字段不是粗体
  • 通俗点说,该字段null=true后,你进行插入,修改操作时可以为空,然后Django把空值转换成null存在数据库中,而blank只是在表单验证的时候会检测你是否可以为空

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

标签:DjangoModel,14,数据库,对应,null,True,price,name
来源: https://www.cnblogs.com/it-lkp/p/16575899.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有