如何在Django中覆盖模型的__new__元类方法

5
我正在使用 Django 1.6 和 Django 中的模型继承。我想做的是连接新类扩展。在 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

谢谢你。
1个回答

9

不要继承自type,而应该继承自django.db.models.base.ModelBase来源)。


也适用于Django 2.2。只是签名不同:def new(cls, name, bases, attrs, **kwargs): - Alessandro Ruffolo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接