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))