如何在django中继承对象?

时间:2011-11-25 10:08:17

标签: python django inheritance

是否有关于如何在django中继承对象的链接或教程?让我们说我有一辆车作为父母,一辆汽车和一辆卡车为它的孩子。

如果有可能,是否在models.py中完成? 它是如何工作的?

感谢...

3 个答案:

答案 0 :(得分:4)

与python继承完全相同

class Vehicle(Model):
    name = models.TextField()

class Car(Vehicle):
    passengers = PositiveIntegerField()

class Truck(Vehicle):
    tonnage = FloatField()

>>> Car.objects.create(name='Beetle', passengers = 5)
<Car: name="Beetle",passengers=5>
>>> Truck.objects.create(name='Mack', tonnage=4.5)
<Truck: name="Mack,tonnage=4.5>
>>> Vehicle.objects.all()
[<Vehicle: name="Beetle">,<Vehicle: name="Mack>]
>>> v = Vehicle.objects.get(name='Beetle')
>>> (bool(v.car), bool(v.truck))
(True, False)
>>> v.car
<Car: name="Beetle",passengers=5>
>>> v.truck
None

https://docs.djangoproject.com/en/dev/topics/db/models/#model-inheritance

答案 1 :(得分:1)

值得注意的是,虽然Django支持一些继承方法,但它们都没有以多态方式运行,也就是说,如果使用抽象基础,则无法对Vehicle模型进行查询并获取Car实例class,如果使用Multi表继承,则不能使用基类模型实例中子类的行为。

some apps和片段试图解决此问题,但我发现它们对整合非常友好。

答案 2 :(得分:0)

由于Django使用Python,因此普通的Python继承可以正常工作。有关继承模型的更多信息,请参阅有关模型的Django文档,尤其是关于Model inheritance的部分。