Я думаю, вы можете попробовать вот так:
def get_likes(self, obj):
# if you have related_name='votes' in Vote model
# then it will be obj.votes.count()
# else
return obj.vote_set.count()
или вы можете попробовать эффективное решение. Для этого обновленного набора запросов:
from django.db.models import Count
class API(ListAPIView):
queryset = Article.objects.annotate(vote_count=Count('vote'))
И измените сериализатор:
class ArticleSerializer(serializers.ModelSerializer):
author = UserSerializer(read_only=True)
comments = CommentSerializer(read_only=True, many=True)
likes = serializers.IntegerField(
source='vote_count',
read_only=True
)
Причина этого эффективность заключается в том, что он не запрашивает базу данных для каждого счетчика, скорее делать это один раз, когда набор запросов оценивается.