以下代码是TranslatedContent类的一部分,该类将自定义管理器添加到模型中。
if hasattr(cls, 'objects'):
if cls.objects.__class__ == models.Manager:
# default manager, override
cls.add_to_class('objects', TranslationManager()
else:
# there is a custom manager, don't override
cls.add_to_class('translated', TranslationManager())
当自定义管理器已存在时,它会为管理器使用不同的名称。 (在这种情况下'翻译')这不是我想要的。
如何使用相同的名称('对象')并仍使用TranslationManager()覆盖它? 而不是覆盖,这将是一个覆盖/扩展。
答案 0 :(得分:1)
你可以做类似的事情:
if hasattr(cls, 'objects'):
if cls.objects.__class__ == models.Manager:
# default manager, override
cls.add_to_class('objects', TranslationManager()
else:
# there is a custom manager, don't override
class CombinedManager(cls.objects.__class__, TranslationManager):
pass
cls.add_to_class('objects', CombinedManager())
但是,您需要对名称空间非常谨慎,尤其是原始管理器与您的TranslationManager
之间可能发生的冲突。一般情况下,最好将其留给最终用户,以确定他们是否希望自定义管理员也包含TranslationManager
。
我建议简单地将其放在文档中TranslationManager
只会在没有自定义管理器的情况下将其添加为默认管理器。否则,用户应该让自定义管理器继承TranslationManager
以获得该功能。