Django - Как запросить топ товаров для каждой даты в заданном интервале дат, используя агрегацию и фильтрацию результатов TruncDay

Если у меня есть эти 4 модели Order, LineItem, Payment и Product. Как я могу получить наиболее продаваемые продукты в определенные дни?

class Product(models.Model):
    sku = models.CharField(...)
    ...

class Order(models.Model):
    ...

class LineItem(models.Model):
   order = models.ForeignKey(Order, ...)
   product = models.ForeignKey(Product, ...)
   amount = models.PositiveIntegerField(...)
   ...

class Payment(models.Model):
   order = models.ForeignKey(Order, ...)
   paid_at = models.DateTimeField(...)
   ....

Я пытался подойти к этому с модели LineItem.

ten_days_ago = timezone.now() - timedelta(days=10)

queryset = LineItem.objects.filter(
    order__payment__paid_at__gte=ten_days_ago
)
.annotate(date=TruncDay("order__payment__paid_at")
.aggregate(
    max_sales=Max(
        "amount",
        filter=Q(
            order__payment__paid_at__gte="date",
            order__payment__paid_at__lte=F("date") + timedelta(days=1),
        ),
    )
)

это дает a

django.core.exceptions.ValidationError: ['“date” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.']

Я сомневаюсь, что запрос будет работать даже с действительным форматом даты, но, если предположить, что он будет работать, как мне отформатировать выражение "дата" и F("дата") в действительную дату? И если он действительно не будет работать, как мне сделать запрос в таких случаях? Спасибо.

Вернуться на верх