Переопределить default_manager стороннего приложения (Django) - PullRequest
2 голосов
/ 14 февраля 2020

Я использую django -адрес модуля (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' в менеджер по умолчанию модели

1 Ответ

2 голосов
/ 17 февраля 2020

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

setattr(State._meta, 'default_manager', CustomManager())
...