因此,在我们的数据库中,我们有一个 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/