温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何理解Python Django模型

发布时间:2021-10-08 09:33:54 来源:亿速云 阅读:115 作者:iii 栏目:开发技术

这篇文章主要讲解了“如何理解Python Django模型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Python Django模型”吧!

目录
  • Django模型

    • 字段类型

    • 字段类型的参数

    • 外键

  • 总结

    Django模型

    Django的模型定义在models.py文件中。模型是MVT中的M,也相当于MVC中的M。

    在Django中,模型必须继承自Model类。例如:

    from django.db import models
    # Create your models here.
    class BookInfo(models.Model):       # 一个模型类就会对应生成数据库中的一张表
        """书籍模型"""  
        name = models.CharField(max_length=128, verbose_name='名称')        # 类的属性就是数据表中的字段。
        pub_date = models.DateField(verbose_name='发布日期',null=True)
        readcount = models.IntegerField(default=0, verbose_name='阅读量')
        commentcount = models.IntegerField(default=0, verbose_name='评论量')
        is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
        class Meta:     # class Meta是固定写法
            db_table = 'bookinfo'      # 指明数据库表名
            verbose_name = '图书'       # 在admin站点中显示的名称

    注意

    1.模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名,一般我们会通过db_table指明数据库表名。

    2.django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。默认创建的主键列属性为id,也可以使用pk,意为primary key.

    3.字段名称中不能出现双下划线,因为这是Django的查询语法之一。

    自Django3.2后,可以在settings.py中配置DEFAULT_AUTO_FIELD参数来设置主键的数据类型,默认是DEFAULT_AUTO_FIELD = ‘django.db.models.BigAutoField',在Django3.2之前,默认生成的主键数据类型是AutoField.

    下面是Django中常用的字段类型的详情

    字段类型

    类型说明
    BigAutoField自动增长的BigIntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性
    BooleanField布尔字段,值为True或False
    NullBooleanField支持Null、True、False三种值
    CharField字符串,参数max_length表示最大字符个数
    TextField大文本字段,一般超过4000个字符时使用
    IntegerField整数
    DecimalField十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数
    FloatField浮点数
    DateField日期, 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误
    TimeField时间,参数同DateField
    DateTimeField日期时间,参数同DateField
    FileField上传文件字段
    ImageField继承于FileField,对上传的内容进行校验,确保是有效的图片


    下面是字段类型中的参数

    字段类型的参数

    参数说明
    null如果为True,表示允许为空,默认值是False
    blank如果为True,则该字段允许为空白,默认值是False
    db_column字段的名称,如果未指定,则使用属性的名称
    db_index若值为True, 则在表中会为此字段创建索引,默认值是False
    default为字段指定默认值
    primary_key若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用
    unique如果为True, 这个字段在表中必须有唯一值,默认值是False
    choices该参数是从一系列的二元组中提供选项

    注意

    1.CharField字段必须要指定参数max_length

    2.还可以为字段指定参数verbose_name,这个参数主要是用来在admin管理页面使用,其实是和本地化有关的。例如可以在上面的name字段指定参数verbose_name=“书籍名称”,那么在admin管理页面就会看到书籍名称。

    3.null参数是数据库层面的,设置null=True之后,表示数据库的该字段可以为空;blank参数是表单层面(HTML),blank=True之后,表示表单填写该字段的时候可以不填。

    外键

    外键这个东西,通常都是在业务逻辑层面来实现的,而不是在数据库中实现。但是通常大家学习的数据库课程中,都会有数据库设计范式,其中有个第三范式就是专指的外键约束。在这里只是简单的介绍一下。下面是另外一个模型,和前面的BookInfo模型通过外键关联起来。

    class PeopleInfo(models.Model):
        """人员模型"""
        GENDER_CHOICES = (
            (0, 'male'),
            (1, 'female')
        )
        name = models.CharField(max_length=20, verbose_name='名称')
        gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
        description = models.CharField(max_length=200, null=True, verbose_name='描述信息')
        book = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')  # 外键
        is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
        class Meta:
            db_table = 'peopleinfo'
            verbose_name = '人物信息'
    下面重点来说一下choices这个参数和models.ForeignKey。
    choices参数就是从我们定义的二元组(GENDER_CHOICES)中获取值。二元组的第一个值会储存在数据库中,而第二个值将只会用于在表单中显示。对于一个模型实例,要获取该字段二元组中相对应的第二个值,使用 get_FOO_display() 方法。例如:获取上面的性别信息,可以使用get_gender_display()方法。
    外键:通过使用models.ForeignKey来设置外键,ForeignKey的第一个参数是要关联的模型类名,第二个参数是on_delete。它的常用值可以如下:
    CASCADE级联,删除主表数据时连通一起删除外键表中数据
    PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
    SET_NULL设置为NULL,仅在该字段null=True允许为null时可用
    SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可用
    SET()设置为特定值或者调用特定方法
    DO_NOTHING不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常

    注意:我们在数据库中,设置外键的时候需要制定另一张表中关联的字段,但是在Django里并没有指定。这是因为Django会默认指定另外一张表的id作为关联字段。如下图所示:

    如何理解Python Django模型

    可以看到peopleinfo这张表中的外键名称是book_id

    感谢各位的阅读,以上就是“如何理解Python Django模型”的内容了,经过本文的学习后,相信大家对如何理解Python Django模型这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI