2

I am using django-address module (https://pypi.org/project/django-address/) in my project. Now I want to add get_by_natural_key method on the default manager of State model of django-address module.

Before Django 1.10 I was able to do it using this code

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())

But from Django1.10, _default_manager is read-only and I am not sure how to add 'get_by_natural_key' method on default manager of model

SHIVAM JINDAL
  • 2,844
  • 1
  • 17
  • 34

1 Answers1

2

I would not recommend to override something that Django does not want you to override but if you still want to do it, you can override default_manager in Meta directly.

setattr(State._meta, 'default_manager', CustomManager())
Dhirendra
  • 780
  • 9
  • 26