Django aggregate sum бросает `int() аргумент должен быть строкой, байтоподобным объектом или числом, а не 'dict'`.

Я пытаюсь создать сериализатор для объединения некоторых данных об инвентаре пользователя, однако он выдает следующую ошибку:

Exception Value:    
int() argument must be a string, a bytes-like object or a number, not 'dict'

Я не уверен, что здесь не хватает времени. Я пытаюсь суммировать поля standard и foil для данного пользователя.

Model.py

class inventory_tokens(models.Model):
    ...
    standard    = models.IntegerField(default=0)
    foil        = models.IntegerField(default=0)

serializers.py

class InventorySerializers(serializers.Serializer):
    total_Cards_Unique = serializers.IntegerField()
    total_Cards = serializers.IntegerField()
    total_Standard = serializers.IntegerField()
    total_Foil = serializers.IntegerField()

views.py

# Inventory Data
class InventoryData(views.APIView):
    def get(self, request):
        user_id = self.request.user
        data = [{
            "total_Cards_Unique": inventory_cards.objects.filter(user_id=user_id).count(),
            "total_Cards": 0,
            "total_Standard": inventory_cards.objects.filter(user_id=user_id).aggregate(Sum('standard')),
            'total_Foil': inventory_cards.objects.filter(user_id=user_id).aggregate(Sum('foil')),
        }]
        results = InventorySerializers(data, many=True).data
        return Response(results)

полное отслеживание

Для Sum вам нужно будет "распаковать" данные в словарь, так:

qsresult = inventory_cards.objects.filter(
    user_id=user_id
).aggregate(
    standard_sum=Sum('standard'),
    foil_sum=Sum('foil'),
    count=Count('pk')
)
data = [{
    'total_Cards_Unique': qsresult['count'],
    'total_Cards': 0,
    'total_Standard': qsresult['standard_sum'],
    'total_Foil': qsresult['foil_sum']
}]

Составляя несколько агрегатов с одним и тем же QuerySet, мы тем самым ограничиваем количество запросов к базе данных до одного.

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