即我们有
class Place(models.Model):...
class Restaurant(Place):...
class Cafe(Place):...
我想以某种方式查询Place
:
q = Place.objects.all() # how?
但对于q[x]
,我不希望有Place
类实例,而是Restaurant
或Cafe
(真正存储的是什么(,所以我可以调用模型类的一些多态方法。可能的
只有将查询放在父类上,才能获得父类的实例,但根据Django关于多表继承的文档:
继承关系引入子模型之间的链接以及它的每个父代(经由自动创建的
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