Я пытаюсь оптимизировать некоторые наборы запросов в моем коде Django, используя prefetch_related
.
Однако я понял, что если в другом месте кода функция набора запросов, такая как first
, last
, latest
и т. Д., Вызывается для связанного набора запросов, запрос запускается независимо, фактически сводя на нет Оптимизация.
например.
class Client(models.Model):
# [...]
@property
def latest_order(self):
self.orders.latest('ordered_at') # Order is a Many-to-one related obj
Использование Client.objects.prefetch_related('orders')
не будет полезным, и latest_order
будет по-прежнему запускать запрос для каждого Client
.
Есть ли способ обойти это без изменения свойства модели Client
? В противном случае, если это лучшее решение, как лучше сохранить функциональность latest_order
?
Единственный способ, о котором я могу думать, - это просто реплицировать функциональность latest
, но в памяти (через функцию sorted
), однако это означает, что я теряю способность выполнять эту операцию на стороне базы данных, если она выгодно (например, я просто смотрю на 1 клиента с большим количеством заказов).