覆盖第三方应用程序(Django)的default_manager

问题描述 投票:1回答:1

我在我的项目中使用django-address模块​​(https://pypi.org/project/django-address/)。现在,我想在get_by_natural_key模块的State模型的默认管理器上添加django-address方法。

在Django 1.10之前,我可以使用此代码来做到这一点

class CustomManager(models.Manager):
    def get_by_natural_key(self, state_name, country):
        country = Country.objects.get_or_create(name=country)[0]
        print(country)
        return State.objects.get_or_create(name=state_name, country=country)[0]

State.add_to_class('objects', CustomManager())
State.add_to_class('_default_manager', CustomManager())

但是从Django1.10开始,_default_manager是只读的,我不确定如何在模型的默认管理器上添加'get_by_natural_key'方法

django python-3.x django-2.0
1个回答
1
投票

我不建议您覆盖Django不想覆盖的内容,但是如果您仍然想要这样做,则可以直接覆盖Meta中的default_manager

setattr(State._meta, 'default_manager', CustomManager())
© www.soinside.com 2019 - 2024. All rights reserved.