我正在使用以下代码。
class CommonFunctions(object):
def get_absolute_url(self):
return "/{0}/list/".format(self.__class__.__name__).lower()
def get_fields(self):
return [(field, field.value_to_string(self)) for field in (self.__class__)._meta.fields]
class Meta:
abstract = True
班级
class Book(models.Model, CommonFunctions):
book_name = models.CharField(max_length=30)
book_area = models.CharField(max_length=30)
现在,如果我使用它,我会收到错误,
ForeignKey
无法定义与抽象类的关系
但如果我使用
class Meta:
abstract = False
在Book
课程中,它可以正常工作。
如果documentation表示它应该继承true
,为什么会继承false
?
Django确实对抽象基类的Meta类进行了一次调整:在安装Meta属性之前,它设置
abstract=False
。这意味着抽象基类的子项本身不会自动成为抽象类。
答案 0 :(得分:8)
您的CommonFunctions
应基于models.Model
,而不是object
。这样,您将获得Django文档中陈述的行为。
class CommonFunctions(models.Model):
def get_absolute_url(self):
return "/{0}/list/".format(self.__class__.__name__).lower()
def get_fields(self):
return [(field, field.value_to_string(self)) for field in (self.__class__)._meta.fields]
class Meta:
abstract = True
然后,您的Book
课程应仅基于CommonFunctions
。
class Book(CommonFunctions):
book_name = models.CharField(max_length=30)
book_area = models.CharField(max_length=30)