多表查询

建表:

class Book(models.Model):

    nid = models.AutoField(primary_key=True)

    name = models.CharField(max_length=32,null=True)

    price = models.DecimalField(max_digits=5, decimal_places=2)

    publish_date = models.DateField()

    # 新增或者删除字段(写一个属性/注释掉)

    # default 指定默认值

    # null 这个字段你可以为空

    # xxaa=models.CharField(max_length=32,null=True)

    # 一对多的关系一旦确立,关联关系写在多的一方

    publish = models.ForeignKey(to='Publish',to_field='nid',on_delete=models.CASCADE)

    # 多对多的关系需要创建第三张表(自动创建第三张表)

    authors=models.ManyToManyField(to='Author')

多表操作

         基于对象的跨表查询(多次查询)

                   一对一:

                            -正向查询按字段

                            -反向查询按表名小写

                   一对多:

                            -正向查询按字段(正向查询一定会查出一个来)

                            -反向查询按表名小写_set.all()(返回结果是queryset对象)

                  

                   多对多:

                            -正向查询按字段.all()(正向查询一定会查出多个来)

                            -反向查询按表名小写_set.all()(返回结果是queryset对象)

                  

         基于双下划线的跨表查询

                   -在filter和values中都可以做连表操作(也就是都可以写 __)

                   -正向查询按字段

                   -反向查询按表名小写

                  

                   无论以谁做基表,没有效率之分

原文地址:https://www.cnblogs.com/zhouhai007/p/10269055.html