У меня есть 2 модели, подобные этим:
class Client(models.Model):
// some fields
class Transaction(models.Model):
client = models.ForeignKey(Client)
created = models.DateTimeField(auto_now_add=True)
amount = DecimalField(max_digits=9, decimal_places=2)
Я хочу написать запрос, который добавит последнюю созданную сумму Transaction
для клиентов, только если created
ниже предоставленной date
аргумент.
Например, если у меня есть такой набор данных и что date
имеет значение 01/20:
Client1:
- Transaction 1, created on 01/15, 5€
- Transaction 2, created on 01/16, 6€
- Transaction 3, created on 01/22, 7€
Client2:
- Transaction 4, created on 01/18, 8€
- Transaction 5, created on 01/19, 9€
- Transaction 6, created on 01/21, 10€
Client3:
- Transaction 7, created on 01/21, 11€
Тогда запрос должен вернуть 15
(6 € + 9 € от транзакций 2 и 5).
С точки зрения производительности, моя цель - избежать N запросов для N клиентов.
В настоящее время у меня проблемы с выбором правильных Transaction
объектов.Может быть, я мог бы начать с: Transaction.objects.filter(created__lt=date).select_related('client')
.Но тогда я не могу понять, как выбрать только самые последние для каждого клиента .