У меня есть рекурсивная модель. Давайте назовем это 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
Это действительно близко к работе, но мучительно медленно, потому что он выполняет рекурсивную проверку каждой строки в базе данных для каждого запроса. Есть ли способ сделать это быстрее?