Проверьте, отправил ли пользователь запрос перед тем, как Django Rest Framework
У меня есть эти сериализаторы для сложения и вычитания баллов в ответе на форуме.
class AddPointsSerializer(serializers.ModelSerializer):
class Meta:
model = Answer
fields = ('number_of_points',)
def update(self, instance, validated_data):
instance.number_of_points += 1
instance.save()
return instance
class SubtractPointsSerializer(serializers.ModelSerializer):
class Meta:
model = Answer
fields = ('number_of_points',)
def update(self, instance, validated_data):
instance.number_of_points -= 1
instance.save()
return instance
Viewset выглядит следующим образом (то же самое относится и к добавлению):
class SubtractPointsAnswer(generics.UpdateAPIView):
queryset = Answer.objects.all()
serializer_class = SubtractPointsSerializer
def get_queryset(self):
return super().get_queryset().filter(
id=self.kwargs['pk']
)
Сейчас каждый пользователь может только один раз проголосовать за ответ и один раз за него проголосовать. Поэтому кто-то может случайно проголосовать вниз, а затем снова проголосовать вверх за определенный ответ. Урлы: questions/int:pk/addpoint. questions/int:pk/subtractpoint. Поэтому я хотел бы сделать ограничение на Serializer, чтобы user_limit = 0, если request.user уже нажал upvote, то user_limit = 1, а если user_limit = 1, то возвращать ответ, что ответ уже проголосован. Но я понятия не имею, как реализовать эту логику в сериализаторе, так как я очень новичок в Django Rest Framework. Или, может быть, у вас есть идея, как ограничить количество проголосовавших пользователей?