Добавление .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"))
Посмотрите обратные отношения