DRF:如何改变序列的输出行为(存进去是json字符串,返回为字典)

在这里插入图片描述

需求

数据模型:

class QuestionsConfigs(BaseModels):
    """
    题目
    """
    class Meta:
        db_table = "questions"
        ordering = ['-created']
    objects = QuestionsManager()
    content = models.CharField(max_length=2000, default="")  # 问题的内容

其中content字段存进去时候是json字符串,在进行序列化时,如果是下面这样:

class QuestionConfigSerializer(serializers.ModelSerializer):
    """
    问题的序列化
    """
    content = serializers.JSONField(required=False)

    class Meta:
        model = QuestionsConfigs
        fields = ['id', 'content']

在执行下面代码的时候:

self.get_serializer(queryset).data

content会被当成json字符串处理,而不是字典处理。


序列化的代码改成下面这样就可以了

class QuestionConfigSerializer(serializers.ModelSerializer):
    """
    问题的序列化
    """
    config = serializers.JSONField(required=False)

    class Meta:
        model = QuestionsConfigs
        fields = ['id', 'content']

    def to_representation(self, instance):
        """Convert `username` to lowercase."""
        ret = super().to_representation(instance)
        if 'content' in ret:
            ret['content'] = json.loads(ret['content'])
        return ret
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值