用装饰器改变django模型'.objects'的经理

时间:2018-04-16 18:36:46

标签: django

我正在尝试编写一个装饰器,用于更改django模型的管理器,如下所示:

def custom_manager(*args):
    class CustomManager(models.Manager):
        pass
    def wrapper(cls):
        cls.add_to_class('objects', CustomManager())
        return cls
    return wrapper

@custom_manager()
class SomeModel(models.Model):
    pass

问题似乎是默认管理器已经采用objects属性,必须先从模型中删除它。简单地在装饰器中设置cls.objects = CustomManager()也不起作用。

如果我使用一些未使用的属性名称(即不是objects),一切正常,但我想完全替换objects属性以使所有应用程序(例如DjangoAdmin等)使用此自定义管理器。

那么有没有办法从模型中正确删除默认管理器或以其他方式修复它?

0 个答案:

没有答案