Python Django-多表继承-与子类的反向关系
我将感谢您对以下问题的帮助。 让我们使用Django文档中的模型来说明我的情况 models.pyPython Django-多表继承-与子类的反向关系,python,django,downcast,multi-table-inheritance,Python,Django,Downcast,Multi Table Inheritance,我将感谢您对以下问题的帮助。 让我们使用Django文档中的模型来说明我的情况 models.py from django.db import models class Place(models.Model): owner = DjangoModels.ForeignKey('Owner', related_name='places') objects = PassThroughManager.for_queryset_class(PlaceQuerySet)() class
from django.db import models
class Place(models.Model):
owner = DjangoModels.ForeignKey('Owner', related_name='places')
objects = PassThroughManager.for_queryset_class(PlaceQuerySet)()
class Restaurant(Place):
... some members ...
objects = PassThroughManager.for_queryset_class(RestaurantQuerySet)()
class Pub(Place):
... some members ...
objects = PassThroughManager.for_queryset_class(PubQuerySet)()
class Owner(models.Model):
... some members ...
queryset.py
class PlaceQuerySet(DjangoModels.query.QuerySet):
.. common place filters ...
class RestaurantQuerySet(PlaceQuerySet):
.. restaurant specific filters ...
class PubQuerySet(PlaceQuerySet):
.. pub specific filters ...
正如你在上面看到的,我有一个基本模型“地方”和两个子模型“餐厅”和“酒吧”。
基础模型“Place”具有指向“Owner”对象的链接。QuerySet(PlaceQuerySet、RestaurantQuerySet、PubQuerySet)具有与模型(Place、Restaurant、Pub)相同的继承层次结构
我面临的挑战是如何检索只包含链接到特定所有者的发布对象的PubQuerySet
我知道我需要的一种方法是将owned_by(owner)过滤器添加到PubQuerySet中,并调用以下命令:
Pub.objects.owned_by(owner)
但它有性能问题,因为“.objects”不使用预取的结果,并且它总是命中数据库
我的想法: 当我打电话时
# owner is instance of Owner class
>>owner.places.all()
它回来了
PlaceQuerySet[<Place object ><Place object ><Place object >....]
我将获得带有Pub类实例的PlaceQuerySet
PlaceQuerySet[<Pub object ><Pub object >]
PlaceQuerySet[]
但我还是会收到PlaceQuerySet而不是PubQuerySet
非常感谢你的帮助
Jano我无法想象为什么queryset课程很重要,你能解释一下吗?您只需要迭代查询集,对吗?嗨,查询集的类很重要,因为我需要在该查询集上链接更多的过滤器,而这些过滤器仅在PubQuerySet中可用。另一个原因是,如果您使用的是PlaceQUerySet,那么您只能基于Place类的成员进行筛选。谢谢你的帮助..啊,有道理,有没有办法将它转换到另一个queryset或实例化新的queryset并设置一些属性。。。
# owner is instance of Owner class
>>owner.places.select_subclasses('pub')
PlaceQuerySet[<Pub object ><Pub object >]