我使用两个django包- django-mptt (用于实现修改的预顺序树遍历的实用程序)和django-hvad (模型转换)。
我有一个模型类MenuItem,我希望它扩展TranslatableModel和MPTTModel,如下所示:
class MenuItem(TranslatableModel, MPTTModel):但它会引起元类冲突:
(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)这个问题的解决办法是什么?我希望我能使用双重继承。
发布于 2012-08-13 19:43:05
您可能需要执行以下操作:
class CombinedMeta(TranslatableModel.__metaclass__, MPTTModel.__metaclass__):
pass
class MenuItem(TranslatableModel, MPTTModel):
__metaclass__=CombinedMeta这应该给您提供您想要的,没有任何错误的介面。
发布于 2012-12-18 08:20:14
很抱歉回答得太晚,但我认为这对有同样问题的人会有帮助。子类MPTTModel和其他类时,请确保将MPTTModel放在第一位,如下所示:
class MenuItem(MPTTModel, TranslatableModel):发布于 2013-09-11 08:06:25
一般来说,“schacki”的答案是可行的。然而,django-hvad覆盖了许多其他管理器/queryset类,这使得目前不可能与django-mptt/django-多态和朋友集成。
看看django-parler,它具有与django-hvad类似的API和admin集成功能,但在其他包中也很不错。表的布局是相同的,所以您应该能够轻松地切换包。
https://stackoverflow.com/questions/11254553
复制相似问题