zoukankan      html  css  js  c++  java
  • Python--day68--Django ORM的字段参数、元信息

    字段参数

    null

    用于表示某个字段可以为空。

    unique

    如果设置为unique=True 则该字段在此表中必须是唯一的 。

    db_index

    如果db_index=True 则代表着为此字段设置数据库索引。

    default

    为该字段设置默认值。

    时间字段独有

    DatetimeField、DateField、TimeField这个三个时间字段,都可以设置如下属性。

    auto_now_add

    配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。

    auto_now

    配置上auto_now=True,每次更新数据记录的时候会更新该字段。

     

    关系字段

    ForeignKey

    外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。

    ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。

    字段参数

    to

    设置要关联的表

    to_field

    设置要关联的表的字段

    related_name

    反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。

    例如:

    class Classes(models.Model):
        name = models.CharField(max_length=32)
    
    class Student(models.Model):
        name = models.CharField(max_length=32)
        theclass = models.ForeignKey(to="Classes")

    当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写:

    models.Classes.objects.first().student_set.all()

    当我们在ForeignKey字段中添加了参数 related_name 后,

    class Student(models.Model):
        name = models.CharField(max_length=32)
        theclass = models.ForeignKey(to="Classes", related_name="students")

    当我们要查询某个班级关联的所有学生(反向查询)时,我们会这么写:

    models.Classes.objects.first().students.all()

    related_query_name

    反向查询操作时,使用的连接前缀,用于替换表名。

    on_delete

    当删除关联表中的数据时,当前表与其关联的行的行为。

    models.CASCADE
    删除关联数据,与之关联也删除


    models.DO_NOTHING
    删除关联数据,引发错误IntegrityError


    models.PROTECT
    删除关联数据,引发错误ProtectedError


    models.SET_NULL
    删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)


    models.SET_DEFAULT
    删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)


    models.SET

    删除关联数据,
    a. 与之关联的值设置为指定值,设置:models.SET(值)
    b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

    复制代码
    def func():
        return 10
    
    class MyModel(models.Model):
        user = models.ForeignKey(
            to="User",
            to_field="id",
            on_delete=models.SET(func)
        )
    复制代码

    db_constraint

    是否在数据库中创建外键约束,默认为True。

    元信息

    ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。主要字段如下:

    db_table

    ORM在数据库中的表名默认是 app_类名,可以通过db_table可以重写表名。

    index_together

    联合索引。

    unique_together

    联合唯一索引。

    ordering

    指定默认按什么字段排序。

    只有设置了该属性,我们查询到的结果才可以被reverse()。

     

    小贴士:大的数据库尽量不用外键,一般都是用软外键,或者说用代码去 操纵数据库。

  • 相关阅读:
    .NET Core HttpClient调用腾讯云对象存储Web API的"ERROR_CGI_PARAM_NO_SUCH_OP"问题
    .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
    腾讯云短信服务使用记录与.NET Core C#代码分享
    .net core中使用Type.GetType()从字符串获取类型遇到的问题
    阿里云不同账号之间相同地域的VPC网络互访
    ASP.NET Core 实现用户登录验证的最低配置
    体验 ASP.NET Core 中的多语言支持(Localization)
    .NET Core 2.0 单元测试中初识 IOptionsMonitor<T>
    体验 PHP under .NET Core
    docker swarm:执行 service update 过程中服务短暂不能访问的问题
  • 原文地址:https://www.cnblogs.com/xudj/p/10480411.html
Copyright © 2011-2022 走看看