即我们有
class Place(models.Model):...
class Restaurant(Place):...
class Cafe(Place):...
我想以某种方式查询Place
:
q = Place.objects.all() # how?
但是对于q[x]
,我不想拥有Place
类实例,而是拥有Restaurant
或Cafe
(实际上存储了什么),因此我会能够调用模型类的某些多态方法。可能吗?
答案 0 :(得分:1)
仅当您将查询放在父类上时,您才能获取父类的实例,但是根据Django在Multi-table inheritance上的文档:
继承关系引入了子模型之间的链接 及其每个父母(通过自动创建的
OneToOneField
)。
因此,您可以通过与Restaurant
和Cafe
相关的名称访问restaurant
和cafe
实例:
for place in Place.objects.all():
try:
restaurant = place.restaurant
except Restaurant.DoesNotExist:
restaurant = None
try:
cafe = place.cafe
except Cafe.DoesNotExist:
cafe = None