Manager

Manager 是一个接口,通过它可以向 tortoise 模型提供数据库查询操作。

每个 tortoise 模型都有一个默认的 Manager。

用法

有两种方法可以使用 Manager,一种是在 Meta 中使用 manager 来覆盖默认的 manager,另一种是在模型中定义 manager。

from tortoise.manager import Manager

class StatusManager(Manager):
    def get_queryset(self):
        return super(StatusManager, self).get_queryset().filter(status=1)


class ManagerModel(Model):
    status = fields.IntField(default=0)
    all_objects = Manager()

    class Meta:
        manager = StatusManager()

覆盖默认 manager 后,所有查询(如 Model.get()Model.filter())都将符合自定义 manager 的行为。

在上面的示例中,你永远无法使用默认 manager 获取状态等于 0 的对象,但是可以使用模型中定义的 manager all_objects 来获取所有对象。

m1 = await ManagerModel.create()
m2 = await ManagerModel.create(status=1)

self.assertEqual(await ManagerModel.all().count(), 1)
self.assertEqual(await ManagerModel.all_objects.count(), 2)

self.assertIsNone(await ManagerModel.get_or_none(pk=m1.pk))
self.assertIsNotNone(await ManagerModel.all_objects.get_or_none(pk=m1.pk))
self.assertIsNotNone(await ManagerModel.get_or_none(pk=m2.pk))