【问题标题】:How to Inherit objects in django?如何继承django中的对象?
【发布时间】:2011-11-25 10:08:17
【问题描述】:

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

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

谢谢...

【问题讨论】:

    标签: python django inheritance


    【解决方案1】:

    和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

    【讨论】:

    • 嗨,托马斯。你能解释一下如何选择所有车辆,当我有一辆车时,如何知道它是否是汽车(或卡车、摩托车……)。谢谢。
    【解决方案2】:

    值得注意的是,虽然 Django 支持几个继承方法,但它们都不是多态的,也就是说,如果你使用抽象基,你不能对 Vehicle 模型进行查询并获取 Car 实例类,如果你使用多表继承,你不能使用来自基类模型实例的子类的行为。

    some apps 和 sn-ps 试图解决这个问题,但我觉得它们的集成不太友好。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-07
        • 2022-01-21
        • 1970-01-01
        • 2012-01-05
        • 2011-10-08
        • 1970-01-01
        • 2013-07-20
        相关资源
        最近更新 更多