Добавление .annotate foreign key в объекты не дает четкого результата

Когда я выполняю следующий запрос, он работает нормально

    query= UserOrder.objects.filter(order_date__range=(
        Request['from'], Request['to'])).values('user_id__username','user_id__email').annotate(
            total_no_of_order=Count("pk")).annotate(total=Sum('total_cost'))

Но я также хочу знать количество услуг, связанных с заказом

.annotate(total_no_of_services=Count("userorderservice__pk"))

путем добавления вышеприведенного кода в запрос total_no_of_order и total_cost также изменяются, а путем добавления distinct=True в total_cost он учитывает только единственное уникальное значение total_cost

Modles.py

class UserOrder(models.Model):
    order_id = models.AutoField(primary_key=True)
    user_id = models.ForeignKey(AppUser, on_delete=models.CASCADE)
    total_cost = models.FloatField()
    ...


class UserOrderService(models.Model):
    order_id = models.ForeignKey(UserOrder, on_delete=models.CASCADE)
    ...

А UserOrder может иметь много UserOrderService экземпляров.

Следовательно, правильным способом COUNT является:

.annotate(total_no_of_services=Count("userorderservice_set"))

Посмотрите обратные отношения

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