Переопределить default_manager стороннего приложения (Django)

Я использую модуль 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 в диспетчер модели по умолчанию.


person SHIVAM JINDAL    schedule 13.02.2020    source источник


Ответы (1)


Я бы не рекомендовал переопределять что-то, что Django не хочет, чтобы вы переопределяли, но если вы все еще хотите это сделать, вы можете переопределить default_manager напрямую в Meta.

setattr(State._meta, 'default_manager', CustomManager())
person Dhirendra    schedule 17.02.2020