Django REST框架:POST请求:仅在数据不存在时如何保存数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django REST框架:POST请求:仅在数据不存在时如何保存数据相关的知识,希望对你有一定的参考价值。
我是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)
每次我进行POST投票请求时,都会创建一个新的投票。
但是我想检查用户是否已经对投票投票。
我有此代码,但不知道放在哪里:
if not poll in [vote.poll for vote in user.votes.all()]:
# Create Vote
如何正确检查用户是否已在民意调查中投票,如果没有,请创建投票?
答案
一种简单的解决方案是,在Meta部分中设置unique_together
约束。如果您这样做,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 = ('answer', 'user')
以上是关于Django REST框架:POST请求:仅在数据不存在时如何保存数据的主要内容,如果未能解决你的问题,请参考以下文章
django rest 框架 POST 请求因嵌套序列化而失败
从 Vuejs 到 Django REST 框架的 Axios POST 请求
如何使用带有 ajax 的 DJANGO REST 框架发出 POST 请求