在保存序列化程序之前添加附加值

时间:2019-06-20 22:33:19

标签: django django-rest-framework

我的表单将数据发送到django-rest-framework,但是表单包含两个字段,我想在数据库中保存5个字段,其他字段由我自己计算(它们不是由表单发送的)。保存前如何添加其他值?

因此,表单发送“用户”和“评论”值,我想先添加“文章”,“ ip_address”,然后再保存到数据库

models.py

class Comments(models.Model):
    article = models.ForeignKey(Articles, on_delete=models.CASCADE)
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    comment = models.TextField(verbose_name=_('Comment'))
    submit_date = models.DateTimeField(_('Created'), auto_now_add=True)
    ip_address = models.CharField(_('IP address'), max_length=50)
    is_public = models.BooleanField(verbose_name=_('Publish'), default=False)

serializers.py

class CommentsSerializer(serializers.ModelSerializer):
        user = serializers.ReadOnlyField(source='user.first_name')

        class Meta:
            model = Comments
            fields = ('user', 'comment')

views.py

class AddCommentViewSet(viewsets.ModelViewSet):
    queryset = Comments.objects.all()
    serializer_class = CommentsSerializer

1 个答案:

答案 0 :(得分:0)

您必须重写create()方法:

class CommentsSerializer(serializers.ModelSerializer):
    user = serializers.ReadOnlyField(source='user.first_name')

    class Meta:
        model = Comments
        fields = ('user', 'comment')

    def create(self, validated_data):
        new_comment = models.Comment()
        new_comment.user = validated_data['user']
        new_comment.comment = validated_data['comment']
        new_comment.article = get_your_article_somehow()
        new_comment.ip_address = get_your_ip_address_somehow()
        new_comment.save()

        return new_comment
相关问题