2011-11-25 27 views
0

有沒有關於如何在django中繼承對象的鏈接或教程?讓我們說,我有一輛汽車作爲父母,一輛汽車和一輛卡車是它的孩子。如何繼承django中的對象?

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

感謝...

回答

4

完全一樣蟒蛇的傳承

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

+0

嗨托馬斯。你能解釋一下如何選擇所有的車輛,當我有車時,如何知道它是否是一輛汽車(或卡車,摩托車......)。謝謝。 – danihp

+0

增加了一些額外的信息。希望這可以解決問題。 – Thomas

+0

不錯,非常感謝+1 – danihp

0

由於Django的使用Python,普通的Python繼承的作品。有關繼承模型的更多信息,請參閱關於模型的Django文檔,特別是關於Model inheritance的部分。

1

值得一提的是,雖然Django支持一對夫婦的繼承方法,他們沒有在一個多態的行爲方式,也就是你可以」 t在Vehicle模型上進行查詢並在使用抽象基類時獲取Car實例,並且如果使用Multi表繼承,則不能使用基類模型實例中子類的行爲。

someapps和片段試圖解決這個問題,但我不覺得他們非常友好的整合。