python - DRF 如果用户没有投票,则返回 201,如果已投票,则返回 400
问题描述
我需要制作简单的 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。我正在寻找一种方法来编写可以检查当前用户的 Vote 实例是否存在然后返回的逻辑Response(data={"message":"You have already voted"}, status=status.HTTP_400_BAD_REQUEST)
。最简单的方法。
解决方案
推荐阅读
- docker - 像 Docker 这样的容器化软件是如何翻译 CPU 指令的?
- regex - 根据anchortext获取超链接的URL
- java - JaVers 可以使用可观察属性跟踪 JavaFX 模型类的更改吗?
- docker - CircleCI - Docker 登录和私有环境变量
- r - 使用melt和ggplot为每个条创建一个变量的堆叠条形图
- excel - Conditional Formatting,使用公式根据不同的单元格值范围进行格式化
- reactjs - 从 LinkContainer 中删除活动类
- indexing - Neo4j Cypher手动关系索引、APOC触发器和数据复制2
- c# - UWP TreeView ItemTemplateSelector not working
- gnupg - 安装 Halyard 时出错