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

标签 django python-3.x django-2.0

我在我的项目中使用 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/

相关文章:

django - 扩展 Django 中的默认用户模型

django - 在 Django 应用程序中实现 PayPal IPN

python - Django 发出多对多变化的信号

python - 动态创建周期性任务

django - django rest框架中的id、url和自然键

python - 如何使用 pyenv 安装 ipython qtconsole(Python 版本 3.4.2)

python - 按对计数/数据透视表

python - 从python中的列表创建矩阵

python - 在 Django 中更新 DOM 而无需重新加载页面

python - Django 在模型字段更新后将值转换为元组