Мне нужно создать простой API, в котором я отправляю форму, которая создает экземпляр голосования и возвращает код статуса 201, но если пользователь уже проголосовал, он возвращает неверный запрос 400.
мои модели выглядят так:
class Company(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
short_name = models.CharField(max_length=24)
def __str__(self):
return f"{self.short_name}"
class Vote(models.Model):
voter = models.ForeignKey(Company, on_delete=models.CASCADE)
date_voted = models.DateField(auto_now=True)
def __str__(self):
return f"{self.id}/{self.voter}"
views.py
:
class VoteView(CreateAPIView):
queryset = Vote.objects.all()
serializer_class = TaskCreateSerializer
permission_classes = (IsAuthenticated,)
def perform_create(self, serializer):
if serializer.is_valid():
user = self.request.user
voter = Company.objects.get(user=user)
has_voted = Vote.objects.filter(voter=voter)
serializer.save(voter=voter)
и serializers
class TaskCreateSerializer(ModelSerializer):
class Meta:
model = Vote
fields = [
]
Пока это просто всегда возвращается 201. Я ищу способ, где яможет написать логику, которая может проверить, существует ли экземпляр голосования для текущего пользователя, затем вернуть Response(data={"message":"You have already voted"}, status=status.HTTP_400_BAD_REQUEST)
.Самый простой способ.