【问题标题】:Override default_manager of third party app (Django)覆盖第三方应用程序的 default_manager (Django)
【发布时间】:2020-05-29 16:09:33
【问题描述】:

我在我的项目中使用 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 python-3.x django-2.0


    【解决方案1】:

    我不建议覆盖 Django 不希望你覆盖的东西,但如果你仍然想这样做,你可以直接在 Meta 中覆盖 default_manager

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-22
      • 2021-02-06
      • 2021-02-14
      • 2020-10-01
      • 2016-08-20
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多