例如,在第一个变体中,您可以QueryManager为您的模型创建 3 个附加Log模型并使用它们(它将类似于 2 个变体,但不创建 3 个附加模型)。
它们可以像create_objects,update_objects或者delete_objects更短(例如create_log)。
这是经理类的示例:
from django.db.models import Manager
class LogManager(Manager):
def __init__(self, type):
super(LogManager, self).__init__()
# add check of type if you need
self._type = type
def get_queryset(self):
return super(LogManager, self).get_queryset().filter(type=self._type)
此代码仅用于演示(我没有测试它)。
在您的模型类中,您应该指定 3 个额外的管理器,如下所示:
from django.db.models import Model
class Log(Model):
create_log = LogManager('create')
update_log = LogManager('update')
delete_log = LogManager('delete')
或者您可以使用__getattr__方法来获得合适的经理,但“显式优于隐式”。