Python Django REST框架:POST请求:如何仅在数据不存在时保存数据';不存在

Python Django REST框架:POST请求:如何仅在数据不存在时保存数据';不存在,python,django,django-rest-framework,Python,Django,Django Rest Framework,我是Django的新手,我遇到了以下问题: 我有以下代码: models.py: class Vote(models.Model): answer = models.ForeignKey(Answer, on_delete=models.CASCADE) user = models.ForeignKey(User,on_delete=models.CASCADE, related_name='votes', null=True) poll = models.Foreign

我是Django的新手,我遇到了以下问题:

我有以下代码:

models.py:

class Vote(models.Model):
    answer = models.ForeignKey(Answer, on_delete=models.CASCADE)
    user = models.ForeignKey(User,on_delete=models.CASCADE, related_name='votes', null=True)
    poll = models.ForeignKey(Poll, on_delete=models.CASCADE, null=True)
views.py:

class VoteViewSet(viewsets.ModelViewSet):
    permission_classes = [
        permissions.IsAuthenticated,
    ]
    serializer_class = VoteSerializer

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)
serializer.py:

class VoteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Vote
        fields = ('id', 'answer', 'user')

    def create(self, validated_data):
        answer = validated_data.get("answer", None)
        poll = answer.poll
        return Vote.objects.create(answer=answer, poll=poll, user=user)

每次我进行投票后请求时,都会创建一个新的投票

但是我想检查一下用户是否已经投票支持投票

我有这个代码,但我不知道放在哪里:

if not poll in [vote.poll for vote in user.votes.all()]:
    # Create Vote

如何正确检查用户是否已经在投票中投票,如果没有,则创建投票?

一个简单的解决方案是,在Meta部分设置一个
唯一的约束。如果你这样做,Django和DRF会处理好的

class Vote(models.Model):
    answer = models.ForeignKey(Answer, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='votes', null=True)

    class Meta:
        unique_together = ('user', 'poll')

一个用户不允许投票不止一次吗?每个用户只能在每次投票中投票一次,但是这个“unique\u-together”属性不允许人们用不同的选项投票吗?你所说的“不同选项”是什么意思?让我们考虑StAccess,我们不能不止一次投票。谢谢您的回复。我有一个不同答案的民意测验。我想允许用户在每次投票中只投票一次。我尝试了
unique\u-together=('poll','user')
,但没有成功。我编辑了我的问题,更新了答案。只需将
poll
添加到字段的其余部分,您的唯一字段应仅为user和poll。将答案添加到唯一字段将允许用户对所有不同选项/答案进行多次投票
class Vote(models.Model):
    answer = models.ForeignKey(Answer, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='votes', null=True)

    class Meta:
        constraints = [
            models.UniqueConstraint(
                fields=('user', 'poll'),
                name='your constraint name'
            )
        ]