我在我的项目中使用 django-address 模块( https://pypi.org/project/django-address/ )。现在我想在 django-address
模块的 State
模型的默认管理器上添加 get_by_natural_key
方法。
在 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 不希望你重写的东西,但如果你仍然想这样做,你可以直接在 Meta 中重写 default_manager
。
setattr(State._meta, 'default_manager', CustomManager())
关于django - 覆盖第三方应用程序的default_manager(Django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60216503/