首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双重继承导致元类冲突

双重继承导致元类冲突
EN

Stack Overflow用户
提问于 2012-06-29 00:05:45
回答 3查看 2.5K关注 0票数 7

我使用两个django包- django-mptt (用于实现修改的预顺序树遍历的实用程序)和django-hvad (模型转换)。

我有一个模型类MenuItem,我希望它扩展TranslatableModel和MPTTModel,如下所示:

代码语言:javascript
复制
class MenuItem(TranslatableModel, MPTTModel):

但它会引起元类冲突:

代码语言:javascript
复制
(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)

这个问题的解决办法是什么?我希望我能使用双重继承。

EN

回答 3

Stack Overflow用户

发布于 2012-08-13 19:43:05

您可能需要执行以下操作:

代码语言:javascript
复制
class CombinedMeta(TranslatableModel.__metaclass__, MPTTModel.__metaclass__):
    pass
class MenuItem(TranslatableModel, MPTTModel):
    __metaclass__=CombinedMeta

这应该给您提供您想要的,没有任何错误的介面。

票数 5
EN

Stack Overflow用户

发布于 2012-12-18 08:20:14

很抱歉回答得太晚,但我认为这对有同样问题的人会有帮助。子类MPTTModel和其他类时,请确保将MPTTModel放在第一位,如下所示:

代码语言:javascript
复制
class MenuItem(MPTTModel, TranslatableModel):
票数 2
EN

Stack Overflow用户

发布于 2013-09-11 08:06:25

一般来说,“schacki”的答案是可行的。然而,django-hvad覆盖了许多其他管理器/queryset类,这使得目前不可能与django-mptt/django-多态和朋友集成。

看看django-parler,它具有与django-hvad类似的API和admin集成功能,但在其他包中也很不错。表的布局是相同的,所以您应该能够轻松地切换包。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11254553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档