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
, мы тем самым ограничиваем количество запросов к базе данных до одного.