python - 在 Django 中管理继承

标签 python django inheritance

因此,在我们的数据库中,我们有一个 Car 模型,但可能有不同类型的汽车,具有不同的字段和与之关联的不同进程,所以我创建了一些从该 Car 继承的模型类,如下所示:

class Car(models.Model):
    field = models.CharField(max_length=300)


class CarA(Car):
    field_a = models.CharField(max_length=300)


class CarA1(CarA):
    field_a1 = models.CharField(max_length=300)


class CarA2(CarA):
    field_a2 = models.CharField(max_length=300)


class CarB(Car):
    field_b = models.CharField(max_length=300)

此外,还有行程,每个行程都有与其关联的汽车:

class Trip(BaseModel):
    car = models.ForeignKey(Car)

如果我有一个 CarA1 实例 car_a1,我可以使用 car_a1.car_ptr 将其保存在 Trip 中,但它将保存为 Car,并从那里开始我认为除了在所有子类中通过 Car id 进行搜索之外,没有办法再次获取 CarA1 实例。

所以,如果我想知道这次旅行有哪种车,或者获取特定的子类字段,那就非常复杂了。

你建议做什么?我可以只保留特定字段可为空(field_a、field_b 等)的 Car 类,以及一个用于指定汽车类型的字段,但这似乎不对,我必须检查类型以验证字段等。但目前看来这是更好的解决方案。

顺便说一句,我正在使用 Django 1.11 和 Python 3.6。

抱歉,我没有使用真正的代码,我认为它会更复杂,也很抱歉,如果我没有很好地解释它,我 sleep 不足,压力很大。

谢谢!

最佳答案

您的模型中的问题是,当引入一种新型汽车(例如汽车 c)时,您需要为此创建另一个表。这并不理想,您需要的是一张用于存储汽车详细信息(常用)的表和一个单独的表,表示“属性”以存储其他详细信息并提供与汽车型号的外键关系。

关于python - 在 Django 中管理继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52751829/

相关文章:

python - SVR : Predicted values are way off from the actual ones despite high r-squared and and low MSE

django - HStore字段插入问题

C++ 静态多态性 (CRTP) 和使用派生类的 typedef

Java 泛型、单例和静态方法

java - java类如何扩展另一个类并同时使用相同的方法名实现接口(interface)

python - 如何根据列值的长度过滤数据框行

python - 在 Oracle DB 上从 python 运行 set role 命令

python - Paradoxon : silent crash on Python's ctypes. CDLL 在导入时出现,但在直接运行时却没有 - 这怎么可能?

django - 我的自定义 RegisterSerializer 不适用于 django-rest-auth

python - 使用模板中的表单访问模型字段的属性