为什么模型mixin会破坏Djangompt外键?

2024-05-29 05:40:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在修改一个基于Django mptt的第三方Django应用程序。我试图将一个巨大的模型重构成基类和一组mixin。一切似乎都很好,然而。。。在

class ModelMixin([see below]):
    class Meta:
        abstract = True

class BaseModel(ModelMixin, MPTTModel):
    class Meta:
        abstract = False
  1. 如果ModelMixin继承自object,South不会看到mixin中声明的任何字段。在
  2. 如果ModelMixin继承了mptt.models.MPTTModel,那么django mptt添加到mptt感知模型中的额外字段将被添加两次;django-mptt不喜欢,尽管mixin是抽象的。在
  3. 最有趣的是,如果ModelMixindjango.db.models.Model继承,那么当我尝试为该模型引入一个外键时,会出现一个非常奇怪的错误:

回溯:

^{pr2}$

Tags: django模型abstract应用程序modelsmixin基类mptt
1条回答
网友
1楼 · 发布于 2024-05-29 05:40:33

来自the docs

Please note that if you are using multi-inheritance, MPTTModel should usually be the first class to be inherited from

这并不能很好地解释您所看到的行为,但是如果您也让mixin从models.Model派生,那么它可能会绕过这个bug。i、 电子邮箱:

class ModelMixin(models.Model):
    class Meta:
        abstract = True

class BaseModel(MPTTModel, ModelMixin):
    class Meta:
        abstract = False

mixin绝对应该从models.Model派生;如果字段仅仅是object的子类,那么这些字段将无法工作,因为它们无法获得ModelBase元类调用的contribute_to_class方法。在

您在案例3中显示的错误可能是Django bug;如果没有完整的回溯,很难判断。你能加上回溯上下文的其余部分吗?在

相关问题 更多 >

    热门问题