Reputation: 1614
This is my models
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)
This is my serializer class
class FindNameSerializer(serializers.ModelSerializer):
class Meta:
model= NumberList
fields = ('name','number')
This is my views
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
which filter the number and return name and number on following url
path('find/<slug:number>/',FindName.as_view(), name='number'),
I am getting following result in my api
[
{
"name": "Saiful Hasan",
"number": 8888888888
}
]
However my target is also to return the total number of spam reported to the user in my API and final API should look like this
[
{
"name": "Saiful Hasan",
"number": 8826478938
"spam": 3
}
]
Number of spam can be calculated as
spam=NumberList.objects.filter(spam=True).count()
How should add spam in result queryset
Upvotes: 0
Views: 1394
Reputation: 88499
You can use SerializerMethodField()
--[DRF Doc] here as,
class FindNameSerializer(serializers.ModelSerializer):
spam = serializers.SerializerMethodField()
def get_spam(self, instance):
return NumberList.objects.filter(spam=True, number=self.context['view'].kwargs['number']).count()
class Meta:
model = NumberList
fields = ('name', 'number', 'spam')
Upvotes: 1