如何为模型实现声明抽象class和方法?

How to declare abstract class and methods for model implementation?

我想知道 Django 中是否有创建抽象的方法 class 我可以在其中声明应在模型中实现的方法。

通常,在Python中,我们这样声明抽象class:

import abc

class MyABC(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    def do_something(self, value):
        raise NotImplementedError

然后像这样实现它:

class MyClass(MyABC):

    def do_something(self, value):
        pass

我用django做的是:

import abc
from django.db import models

class MyClass(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    def __str__(self):
        raise NotImplementedError

class MyClass2(models.Model, MyClass):

    def __str__(self):
        pass

但这给了我错误:

TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

我不明白我在这里做错了什么。 MyClass2 应该继承自 MyClassmodels.Model.

我做错了什么?为什么这是错误的?声明应在模型中实现的方法的更好方法是什么?

对于 django 模型你可以试试这个。

从 django.db 导入模型

class MyClass(models.Model):

   class Meta:
      abstract = True
   def __str__(self):
      raise NotImplementedError

class MyClass2(MyClass):

   def __str__(self):
       pass

参考this 希望这有帮助。