1

一直在使用 Django Polymorphic 来帮助我处理 Django 模型中的复杂继承模式。

我遇到了一个问题,我需要有一个具体的基础模型(因为它本身需要一个 ForeignKey),然后有多个模型从它继承,最终一些模型从其中的多个继承。问题是我收到 E005 错误:

app.NamedWeightedModel:(models.E005)父模型“app.namedmodel”中的字段“basemodel_ptr”与父模型“app.massmodel”中的字段“basemodel_ptr”发生冲突。

触发此操作的简单示例如下所示:

from django.db import models
from polymorphic.models import PolymorphicModel


class BaseModel(PolymorphicModel):
    parent = models.ForeignKey('self')


class NamedModel(BaseModel):
    name = models.CharField(max_length=32)


class MassModel(BaseModel):
    weight = models.FloatField()


class NamedWeightedModel(NamedModel, MassModel):
    pass

有没有更好的方法来处理这个?还是标准方法?

我的真实模型要复杂得多(UML 规范的实现),我希望能够使用多重继承(理想情况下通过多态)使事情变得更容易。

我考虑过让任何多重继承模型成为单继承,所有其他继承模型都映射为 OneToOneFields,但这否定了多态的一些好处。

您能提供的任何帮助将不胜感激。

4

0 回答 0