0

即我们有

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

我想以Place某种方式查询:

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

但是因为q[x]我不想有Place类实例,Restaurant而是Cafe(真正存储的),所以我可以调用模型类的一些多态方法。可能的?

4

1 回答 1

1

如果将查询放在父类上,则只能获取父类的实例,但根据 Django 关于多表继承的文档:

继承关系引入了子模型与其每个父模型之间的链接(通过自动创建的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
于 2018-08-06T05:42:51.337 回答