我有一个递归的模型。我们称之为Organization
。我有另一个模型,它是Organization
的子模型,叫做Store
当Store
在应用程序中列出时,它是一种层次结构格式,因此我们实际上得到了Organization
,并在它们下面包含递归层次结构。在序列化程序中,我们传入参数来过滤Store
,如果存储与过滤器不匹配,则返回None
但是,问题是Organization
仍然会返回,即使它没有Stores
,如果Store
与筛选器不匹配,这会导致表有一堆空页
为了解决这个问题,我想在viewset中根据组织是否有商店来过滤它们
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
这非常接近工作状态,但速度非常慢,因为它对数据库中的每一行的每一个查询都进行递归检查。有没有办法让这更快
我最终采用的解决方案是过滤我需要的商店并获取组织,而不是根据商店属性过滤组织
筛选存储
有多种方法可以做到这一点
找到所有商店的家长
获取所有组织
然后返回组织
相关问题 更多 >
编程相关推荐