双重继承导致元类冲突

2024-05-28 23:10:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个model类MenuItem,我希望它扩展translateablemodel和MPTTModel,如下所示:

class MenuItem(TranslatableModel, MPTTModel):

但它会导致元类冲突:

^{pr2}$

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


Tags: django模型实用程序modelmpttclass双重预订单
3条回答

一般来说,@schacki的答案是有效的。然而,django-hvad在幕后覆盖了许多其他manager/queryset类,这使得目前无法与django mptt/django多态性和friends集成。在

看一下django-parler,它具有与django-hvad相似的API和管理集成,但与其他包一起使用也很不错。表布局是相同的,因此您应该能够轻松地切换包。在

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

class CombinedMeta(TranslatableModel.__metaclass__, MPTTModel.__metaclass__):
    pass
class MenuItem(TranslatableModel, MPTTModel):
    __metaclass__=CombinedMeta

这应该给你你想要的,没有任何错误消息。在

很抱歉迟来答复,但我认为这对有同样问题的人会有所帮助。当您子类MPTTModel和另一个类时,请确保将MPTTModel放在第一位,如下所示:

class MenuItem(MPTTModel, TranslatableModel):

相关问题 更多 >

    热门问题