2014-08-27 72 views
4

我在Django中使用Django 1.6model inheritance。我想要做的是,吸引新的课程延伸。如何重写Django中模型的__new__元类方法

这将在Python中做过类似,

class Meta(type): 
    def __new__(cls, name, bases, newattrs): 
     do_what_you_want_before() 
     result= super(Meta, cls).__new__(cls, name, bases, newattrs) 
     do_what_you_want_after() 
     return result 

class Foo: 
    __metaclass__ = Meta 

class SubFoo(Foo): 
    pass 

当这部分代码被初始化,定制__new__方法将被调用。

我该如何在模型继承的Django中做到这一点。当您尝试使用Django Models执行此操作时,出现如下错误:

TypeError: Error when calling the metaclass bases 
    metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases 

谢谢。

回答

7

代替从type继承,从django.db.models.base.ModelBase继承(source)。