Я пытаюсь объединить множество наборов запросов вместе. Некоторое время назад я попробовал отмеченный ответ из этого вопроса, но в моем случае это не сработало. Мне нужно было вернуть queryset
не список. Поэтому я использовал |
, из второго ответа. В то время это работало нормально, но теперь, когда я пытаюсь использовать его снова для чего-то другого, я получаю следующую ошибку:
Expression tree is too large (maximum depth 1000)
Первоначально я думал, что |
будет согласовывать наборы запросов, но после прочтения документов выясняется, что он соответствует фактическому запросу. И эта конкретная проблема возникает, если запрос становится слишком длинным / сложным.
Вот что я пытаюсь сделать:
def properties(self, request, pk=None):
project = self.get_object()
if project is None:
return Response({'detail': 'Missing project id'}, status=404)
functions = Function.objects.filter(project=project)
properties = Property.objects.none()
for function in functions:
properties = properties | function.property_set.all()
return Response([PropertySerializer(x).data for x in properties])
Поскольку запрос functions
возвращает примерно 1200 результатов, а каждый function
имеет около 5 свойств, я могу понять, что запрос становится слишком длинным / сложным.
Как я могу предотвратить слишком сложный запрос? Или как я могу выполнить несколько запросов и объединить их впоследствии, сохранив конечный результат как набор запросов?