我正在修改基于 django-mptt 的第三方 Django 应用程序。我正在尝试将一个巨大的模型重构为一个基类和一组 mixin。一切似乎都很好,然而......
class ModelMixin([see below]):
class Meta:
abstract = True
class BaseModel(ModelMixin, MPTTModel):
class Meta:
abstract = False
- 如果
ModelMixin
继承自object
, South 看不到 mixin 中声明的任何字段。 - 如果
ModelMixin
继承自mptt.models.MPTTModel
,则 django-mptt 添加到 MPTT 感知模型的额外字段将添加两次;这django-mptt
不喜欢,即使 mixin 是抽象的。 - 最有趣的是,如果
ModelMixin
继承自django.db.models.Model
,当我尝试向该模型引入外键时,我会得到这个该死的奇怪错误:
追溯:
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py"
line 900, in set_field_name
self.field_name = self.field_name or self.to._meta.pk.name
AttributeError: 'NoneType' object has no attribute 'name'