Ran*_*ngh 1 django inheritance abstract-class
我使用以下代码.
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
Run Code Online (Sandbox Code Playgroud)
这堂课是
class Book(models.Model, CommonFunctions):
book_name = models.CharField(max_length=30)
book_area = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用它,我得到一个错误,
ForeignKey无法定义与抽象类的关系
但是,如果我使用
class Meta:
abstract = False
Run Code Online (Sandbox Code Playgroud)
在Book课堂上然后它工作.
true如果他们的文档说它应该继承,为什么它继承false?
Django确实对抽象基类的Meta类进行了一次调整:在安装Meta属性之前,它设置了
abstract=False.这意味着抽象基类的子项本身不会自动成为抽象类.
你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
Run Code Online (Sandbox Code Playgroud)
然后你的Book课程应该只基于CommonFunctions.
class Book(CommonFunctions):
book_name = models.CharField(max_length=30)
book_area = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1037 次 |
| 最近记录: |