Django объявляет подзапрос для повторного использования?
Есть ли способ хранить подзапрос в django так же, как это делает SQL DELCARE?
У меня есть несколько вычислений с использованием подзапросов. Затем я ссылаюсь на эти подзапросы в дальнейших вычислениях.
Проблема в том, что после обращения к этим подзапросам, они "запускаются снова" и вызывают еще один огромный запрос select без необходимости.
Есть ли способ вызвать запрос один раз, а затем использовать его повторно?
Единственное условие - это то, что это должно быть сделано в одном запросе с использованием аннотаций.
Приведенный ниже пример - "fo_val" будет вызываться в дальнейшем несколько раз;
annotations = {
'order_val': Sum('containerorderitem__order_cost'),
'fo_deposit_paid': Coalesce(CwhInvoice.objects.filter(
container_ref=OuterRef('factory_order__ref_no'),
add_cost_code=7
).values('container_ref').annotate(
total=Sum('total_amount')
).values('total'), Value(0)),
'fo_val': FactoryOrderItem.objects.filter(
factory_order_id=OuterRef('factory_order_id')
).values('order_cost').annotate(sum=Func('order_cost', function='SUM')).values('sum'),
'fo_deposit_pct': Cast((F('fo_deposit_paid') / F('fo_val')) * 100, FloatField()),
}
self.model.objects.annotate(**annotations).values(etc)