Как добавить дополнительное значение ключа в представлении API django rest framework? - PullRequest
1 голос
/ 13 июня 2019

Это мои модели

class NumberList(models.Model):
    userId = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
    number = models.PositiveIntegerField()
    spam = models.BooleanField(default=False)

    def __str__(self):
        return str(self.number)

Это мой сериализатор класса

class FindNameSerializer(serializers.ModelSerializer):
    class Meta:
        model= NumberList
        fields = ('name','number')

Это мои взгляды


class FindName(ListAPIView):
    print("server error hai")
    serializer_class = FindNameSerializer
    def get_queryset(self, *args, **kwargs):
        number = self.kwargs.get("number")
        queryset = NumberList.objects.filter(number=number)
        return queryset

, который фильтрует номер и возвращает имя и номер по следующему URL

path('find/<slug:number>/',FindName.as_view(), name='number'),

Я получаю следующий результат в моем API


[
    {
        "name": "Saiful Hasan",
        "number": 8888888888
    }
]

Однако моя цель также состоит в том, чтобы вернуть общее количество спама, сообщенного пользователю в моем API, и окончательный API должен выглядеть следующим образом

[
    {
        "name": "Saiful Hasan",
        "number": 8826478938
        "spam": 3
    }
]

Количество спама можно рассчитать как

spam=NumberList.objects.filter(spam=True).count()

Как добавить спам в набор результатов запроса

1 Ответ

2 голосов
/ 13 июня 2019

Вы можете использовать SerializerMethodField() - [DRF Doc] здесь как,

class FindNameSerializer(serializers.ModelSerializer):
    <b>spam = serializers.SerializerMethodField()

    def get_spam(self, instance):
        return NumberList.objects.filter(spam=True, number=self.context['view'].kwargs['number']).count()</b>

    class Meta:
        model = NumberList
        fields = ('name', 'number', <b>'spam'</b>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...