试图找出总票数,但无法理解它是如何在序列化器中完成的。我是 django 的新手,它是如何完成的?

问题描述 投票:0回答:1

这是我的模型:

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='answers')
    answer = models.CharField(max_length=1000, default="", blank=False)
    author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    createdAt = models.DateTimeField(auto_now_add=True)
    upVotes = models.IntegerField(default=0)
    downVotes = models.IntegerField(default=0)

    def __str__(self):
        return str(self.answer)

这是序列化器:

class AnswerSerializer(serializers.ModelSerializer):

    votes = serializers.SerializerMethodField(method_name='get_votes', read_only=True)
    class Meta:
        model = Answer
        fields = ('id', 'question', 'answer', 'author', 'createdAt', 'votes')

    def get_votes(self, obj):
        if obj.upVotes and obj.downVotes:
            total_votes = (obj.upVotes + obj.downVotes)
            return total_votes

这是我的投票观点:

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def upvote(request, pk):
    answer = get_object_or_404(Answer, id=pk)
    author=request.user
    voter = upVote.objects.filter(author=author, answer=answer)        
    if voter.exists():
        return Response({
            'details':'You cannot vote twice'
        })
    else:
        upVote.objects.create(
            answer=answer,
            author=author
        )
        answer.upVotes += 1
        answer.save()
        return Response({
            'details':'Vote added'
        })

如何找到总票数,这应该针对答案模型。如何在序列化器中进行此类操作?

django django-rest-framework django-serializer
1个回答
0
投票
def get_votes(self, obj):
    total_votes = 0
    if obj.upVotes is not None and obj.downVotes is not None:
        total_votes = (obj.upVotes + obj.downVotes)
        return total_votes
    elif obj.upVotes is None:
        return total_votes
    elif obj.downVotes is None:
        return total_votes

发生这种情况是因为无论是赞成票还是反对票都没有。 你可以做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.