django - 如何从现场添加经理

标签 django django-managers django-models

我想要做的是,当某个模型使用我的字段时,它会自动将自定义管理器添加到该模型。

据我所知,contibute_to_class提供了这样的功能

class MyCustomField(CharField):
    def contribute_to_class(self, cls, name):
        super(MyCustomField, self).contribute_to_class(cls, name)
        setattr(cls, 'custom_manager', CustomManager())

问题是,在我的自定义管理器中,我使用 self.model._default_manager 对默认管理器进行查询,但是当我尝试这样做时,django 说 AttributeError: 'NoneType' object has no attribute '_default_manager'

如果我不使用contribute_to_class并在我的模型类旁边编写自定义管理器,它会按预期工作。可能是什么问题?

最佳答案

管理器,就像字段一样,有一个contribute_to_class方法,如果你不调用它,它们将无法正确设置。正确的调用方法是使用 Model.add_to_class:

class MyCustomField(CharField):
    def contribute_to_class(self, cls, name):
        super(MyCustomField, self).contribute_to_class(cls, name)
        cls.add_to_class('custom_manager', CustomManager())

关于django - 如何从现场添加经理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/609563/

相关文章:

Django 访问自定义管理器中登录的用户

django - 我们如何在 django 管理搜索字段中搜索多对多字段

python - key 错误 : 'locations' in Django app

从 2.3.5 升级到 2.4.1 后,Django-CMS 页面全为空白

django - 如何设置 Django Azure 网站来访问数据库

python - 在 Wagtail 的代码片段中使用 StreamField

django - 为什么将管理器声明为 Django 模型,无效 "objects"

django - 使用基本身份验证保护一些 Web 路径

python - Django:在数据迁移中创建 super 用户

django - 我需要一个小部件来浏览文件系统