У меня есть следующая модель и абстрактный базовый класс
import abc
from django.db import models
class AbstractBase():
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def my_method(self):
return
class MyModel(models.Model, AbstractBase):
@abc.abstractmethod
def my_method(self):
return 1
Но я получаю следующее ошибка.
конфликт метакласса: метакласс производного класса должен быть (нестрогий) подкласс метаклассов всех его баз
Я думаю, что проблема здесь (Как описано здесь http: //code.activestate.com / recipes / 204197-resolve-the-metaclass-conflict / ), что два базовых класса имеют два разных метакласса, поэтому python не может решить, какой метакласс использовать для дочернего объекта.
Чтобы решить эту проблему, я удалил множественное наследование и использовал следующий метод регистрации для регистрации дочернего класса
abc.register(Child)
Но мне этот подход не очень понравился, поскольку он похож на исправление обезьяны.
Есть ли другой способ решить эту проблему?
Я пытаюсь явно назначить метакласс модели для Child, но это не сработало. Я не ищу способ решить эту проблему написанием кода. Я думаю, что это нужно решить, изменив структуру моего класса.