Это потому, что вы возвращаете набор запросов Values из метода get_queryset
, когда получаете значение userID
в request.GET. Также я предполагаю, что для вас важно вернуть этот способ, чтобы вы могли группировать и суммировать значения общего пожертвования. Итак, я думаю, что вы можете подойти примерно так:
Сначала измените метод get_queryset, чтобы он возвращал название аннотированной благотворительной организации:
from django.db.models import F, Sum
...
def get_queryset(self):
queryset = super().get_queryset()
user_id = self.request.GET.get('userID')
if user_id is not None:
queryset = queryset.filter(userID=user_id)
return queryset.values('charityID').annotate(total_donation=Sum('transactionAmount')).annotate(charity_name=F('charityID__charityName'))
Затем обновите сериализатор следующим образом:
class CharityTotalSerializer(ModelSerializer):
charity_name= serializer.ReadOnlyField() # no need to define source
total_donation= serializer.DecimalField(max_digits=64,decimal_places=2)
class Meta:
model = Transaction
fields = ['charity_name','total_donation']
Кроме того, лучше иметь charityName
уникальным (используя unique=True
в моделях), чтобы он не давал запутанных результатов.