我有一个递归模型。我们称之为Organization
。我有另一个模型,它是Organization
的子代,称为Store
。
在应用程序中列出Store
时,它是分层格式的,因此我们实际上得到了Organization
,并在其下面包括了递归层次结构。在序列化程序中,我们传入参数以过滤Store
,如果存储与过滤器不匹配,则返回None
。
但是,要注意的是,即使Organization
没有Stores
仍将返回,这会导致如果Store
不存在,则该表将有一堆空页匹配过滤器。
为了解决这个问题,我想在视图集中根据组织是否将要拥有商店来过滤组织。
queryset = [x for x in queryset if x.will_have_store()]
def will_have_store(self):
willHaveStore = False
for organization in self.organizations.all():
willHaveStore = organization.will_have_store()
if (willHaveStore):
return True
if (hasattr(organization, 'store') and organization.store.id ):
willHaveStore = True
return willHaveStore
这确实接近工作,但是速度很慢,因为它会针对每个查询对数据库中的每一行进行递归检查。反正有什么可以使它更快?
答案 0 :(得分:0)
我最终使用的解决方案是过滤所需的商店并获取组织,而不是根据商店属性过滤组织。
过滤商店
各种方法
获取所有商店的父母
all_orgs = []
for store in store_queryset:
all_orgs.push(store.get_all_parents())
获取所有组织
queryset = Organizations.objects.filter(organization__in=all_orgs)
然后返回组织