Tortoise筛选关联关系表数据-Prefetch

在FastApi里面使用Tortoise-orm,查询关联表数据(外键、一对多、多对多等)时,可以用select_related和prefetch_related来查询,但是查询的关联数据需要筛选时,就需要用到Prefetch。
举例:用户表-部门表,查询部门时,同时获取部门下的人员列表时,就是一对多关系。

class User(models.Model):
    """用户表"""
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=32, index=True)
    is_staff = fields.BooleanField(default=False)  # 是否是管理员
    is_invalid = fields.BooleanField(default=False)  # 是否禁用
    department = fields.ForeignKeyField("cp_model.Department", on_delete=fields.SET_NULL, null=True,
                                        related_name="depart_users", help_text='所属部门')

class Department(AbstractDefaultColumn):
    """部门表"""
    id = fields.CharField(max_length=50, pk=True)
    name = fields.CharField(max_length=64, help_text='部门名')
查询部门和部门下的管理人员:
query_set = await Department.all().prefetch_related(
            Prefetch("depart_users", queryset=User.filter(is_invalid=False, is_staff=True))
        )

这里获取到的query_set里面,每个部门下的depart_users都是筛选过的

你可能感兴趣的:(Tortoise筛选关联关系表数据-Prefetch)