You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Rest Framework中CharField JSON序列化错误修复求助

解决DRF中"Object of type CharField is not JSON serializable"错误

问题描述

使用Django Rest Framework开发首个CRUD功能时,反复出现**"Object of type CharField is not JSON serializable"**错误。

代码片段

模型(models.py)

class Pessoa(models.Model):
    id = models.AutoField(primary_key=True),
    nome = models.CharField(max_length=200),
    cpf = models.CharField(max_length=14, unique=True),

    def __str__(self):
        return self.nome

序列化器(serializers.py)

class PessoaSerializer(serializers.ModelSerializer):
    class Meta:
        model = Pessoa
        fields = ('id', 'nome', 'cpf')

视图(views.py)

class PessoaListCreate(generics.ListCreateAPIView):
    
    serializer_class = PessoaSerializer

    def get_queryset(self):
        queryset = Pessoa.objects.all()
        ocorrencia = self.request.query_params.get('ocorrencia')
        if ocorrencia is not None:
            queryset = queryset.filter(pessoa=ocorrencia)
        return queryset

问题根源与解决方法

你犯了一个基础语法错误:模型类中每个字段定义末尾多写了逗号。

在Python中,单个表达式后加逗号会自动转为元组。比如nome = models.CharField(max_length=200),实际上是把nome赋值为包含CharField对象的元组,而非直接赋值为CharField实例。DRF序列化时会尝试处理这个元组里的CharField对象,而CharField本身不支持JSON序列化,因此抛出错误。

修复步骤

  1. 打开models.py,删除所有字段定义末尾的逗号:
class Pessoa(models.Model):
    id = models.AutoField(primary_key=True)
    nome = models.CharField(max_length=200)
    cpf = models.CharField(max_length=14, unique=True)

    def __str__(self):
        return self.nome
  1. 保存文件后重启服务即可。

额外提示

视图中的filter(pessoa=ocorrencia)可能存在逻辑问题:如果ocorrencia是关联模型的参数,需确保字段名正确,或使用双下划线进行关联查询(如ocorrencia__id=ocorrencia),不过这和当前报错无关,后续测试时若出现查询问题再针对性排查即可。

内容的提问来源于stack exchange,提问作者caiiohenryk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:03:18