如何从Field添加一个Manager [英] How to add a Manager from Field

查看:98
本文介绍了如何从Field添加一个Manager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



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

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

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



如果我没有使用contribut_to_class,并且编写自定义管理器就是我的模型类,它按预期工作。可能是什么问题?

解决方案

管理者,就像Fields一样,有一个contribut_to_class方法,如果你不叫它他们将不会正确设置。调用它的正确方法是使用Model.add_to_class:

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


What i want to do is when some model use my field, it will automaticaly add custom manager to that model.

As far as i know, contibute_to_class provide such functionality

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

The problem is that in my custom manager i use self.model._default_manager to do queries on default manager but when i try to do it, django says AttributeError: 'NoneType' object has no attribute '_default_manager'

If i dont use contribute_to_class and write custom manager iside my model class, it works as expected. What can be the problem?

解决方案

Managers, just like Fields, have a contribute_to_class method, and if you don't call it they won't be set up properly. The correct way to call it is by using 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())

这篇关于如何从Field添加一个Manager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆