[英]Why do model mixins break django-mptt foreign keys?
我正在修改基於django-mptt的第三方Django應用。 我試圖將一個巨大的模型重構為一個基類和一組mixins。 一切似乎都很好,但是...
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'
從文檔 :
請注意,如果您使用的是多重繼承,則MPTTModel通常應該是第一個要從其繼承的類
這並不能完全解釋您所看到的行為,但是如果您還使mixin繼承自models.Model
,則可能可以解決該錯誤。 即:
class ModelMixin(models.Model):
class Meta:
abstract = True
class BaseModel(MPTTModel, ModelMixin):
class Meta:
abstract = False
mixin肯定應該從models.Model
派生; 該場將無法正常工作,如果它僅僅是子類object
,因為他們不會得到他們的contribute_to_class
被調用的方法ModelBase
的元類。
您在案例3中顯示的錯誤可能是Django錯誤; 沒有完整的追溯就很難說。 您可以添加其余的追溯上下文嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.