在Django中进行多表继承的情况下,基本模型的多态查询是否可行?

时间:2018-08-06 02:34:01

标签: django multi-table-inheritance

即我们有

class Place(models.Model):...
class Restaurant(Place):...
class Cafe(Place):...

我想以某种方式查询Place

q = Place.objects.all() # how?

但是对于q[x],我不想拥有Place类实例,而是拥有RestaurantCafe(实际上存储了什么),因此我会能够调用模型类的某些多态方法。可能吗?

1 个答案:

答案 0 :(得分:1)

仅当您将查询放在父类上时,您才能获取父类的实例,但是根据Django在Multi-table inheritance上的文档:

  

继承关系引入了子模型之间的链接   及其每个父母(通过自动创建的OneToOneField)。

因此,您可以通过与RestaurantCafe相关的名称访问restaurantcafe实例:

for place in Place.objects.all():
    try:
        restaurant = place.restaurant
    except Restaurant.DoesNotExist:
        restaurant = None
    try:
        cafe = place.cafe
    except Cafe.DoesNotExist:
        cafe = None