0

在这里,我调用了两个模型PostCommentAnswerComment分别用于处理我的 Web 应用程序中的评论。现在我需要对发布和回答评论都有投票选项。因此,我虽然在这里使用 Django GenericRelations 将是一个好主意。我已经实现了所有部分,我不能使用 Django Rest Framework 来使用 Django 发布数据HyperlinkedRelatedField。我正在使用rest-framework-generic-relations链接)应用程序,因为 DRF 文档已推荐它。当我尝试发布数据时,它给了我以下错误。

在此处输入图像描述

以下是我的实现,

发布和回答模型,

class PostComment(models.Model):

    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    comment = models.TextField(blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

class AnswerComment(models.Model):

    answer = models.ForeignKey(Answer, on_delete=models.CASCADE)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    comment = models.TextField(blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

评论模型,

class VoteType(models.TextChoices):
    EMPTY = 'EMPTY'
    LIKE = 'LIKE'
    DISLIKE = 'DISLIKE'

class CommentVote(models.Model):

    voteType = models.CharField(max_length=10, choices=VoteType.choices, default=VoteType.EMPTY)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now=True)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    voted_object = GenericForeignKey('content_type', 'object_id')

用于投票的序列化程序(在文档中实现),

class CommentVoteSerializer(serializers.ModelSerializer):

    voted_object = GenericRelatedField({
        AnswerComment: serializers.HyperlinkedRelatedField(
            queryset=AnswerComment.objects.all(),
            view_name='answercomment-detail'
        ),
        PostComment: serializers.HyperlinkedRelatedField(
            queryset=PostComment.objects.all(),
            view_name='postcomment-detail'
        ),
    })

    class Meta:
        model = CommentVote
        fields = ['voted_object', 'voteType', 'owner']

查看投票,

class CommentVoteViewSet(viewsets.ModelViewSet):

    queryset = CommentVote.objects.all()
    serializer_class = CommentVoteSerializer

投票的网址,

router.register(r'comment_vote', CommentVoteViewSet, basename='comment_vote_api')

任何帮助都会很棒。谢谢!

4

0 回答 0