• drf-基表、断关联表关系、级联删除、正方向查询、子序列化


    基表

    为抽象表,是专门用来被继承,提供公有字段的,自身不会完成数据库迁移

    class BaseModel(models.Model):
        is_delete = models.BooleanField(default=False)
        created_time = models.DateTimeField(auto_now_add=True)
    
        class Meta:
           
            abstract = True
    

    断关联表关系

    1. 不会影响连表查询操作效率
    2. 会提升连表增删改操作效率
    3. 易于后期数据库表的重构
    4. 缺点:数据库本身没有连表检测,容易出现脏数据,需要通过严格的逻辑避免脏数据的参数(必要的时候管理脏数据)

    外键字段属性

    1. related_name 在外键中设置外键反向查询的字段名:正向找字段名,反向找 related_name
    2. on_delete 在外键中必须设置,表示级联关系;在Django 1.X下,系统自动提供,默认 models.CASCADE ;Django 2.X下,必须手动设置,默认级联;
    • CASCADE:默认值,级联;
    • DO_NATHING:外键不会被级联;
    • SET_DEFAULT:被关联数据被删除,关联数据的外键字段变成 default 的值;
    • SET_NULL:被关联数据被删除,关联数据的外键字段置为 null,必须配置 null = True 使用;
    • 多对多字段不能设置 on_delete 级联关系,默认为级联;
    1. db_constraint 在外键中控制表关联,默认为True,表示关联;
    class Book(BaseModel):
        name = models.CharField(max_length=64)
        price = models.DecimalField(max_digits=10, decimal_places=2)
        publish = models.ForeignKey(to='Publish', related_name='books', db_constraint=False, on_delete=models.DO_NOTHING, null=True)
        authors = models.ManyToManyField(to='Author', related_name='books', db_constraint=False)
    
        def __str__(self):
            return self.name
    
    class Publish(BaseModel):
        name = models.CharField(max_length=64)
        address = models.CharField(max_length=64)
    
    class Author(BaseModel):
        name = models.CharField(max_length=64)
    
    class AuthorDetail(BaseModel):
        mobile = models.CharField(max_length=64)
        author = models.OneToOneField(to=Author, related_name='detail', db_constraint=False, on_delete=models.CASCADE)
    
    

    子序列化

    1. 只能在序列化中使用;
    2. 字段名必须是外键(正向反向)字段;因为相对于自定义的序列化外键字段,自定义序列化字段是不能参与反序列化的,而子序列化必须为外键名,所以就无法入库;
    3. 在外键关联数据是多条时,需要明确 many = True
    4. 是单向操作,作为子系列的类必须写在上方,不能产生逆向的子序列化;
  • 相关阅读:
    json_decode 转数组
    json_encode转义中文问题
    ECshop后台新功能权限添加
    mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
    mysql数据库表设计小数类型
    mysql group_concat用法
    PHP socket通信之UDP
    本地tp项目上传服务器报runtime/cache错误
    mysql 命令一套
    linux 9 -- 交互式使用Bash Shell
  • 原文地址:https://www.cnblogs.com/shenblog/p/12103854.html
Copyright © 2020-2023  润新知