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序列化,因此抛出错误。
修复步骤
- 打开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
- 保存文件后重启服务即可。
额外提示
视图中的filter(pessoa=ocorrencia)可能存在逻辑问题:如果ocorrencia是关联模型的参数,需确保字段名正确,或使用双下划线进行关联查询(如ocorrencia__id=ocorrencia),不过这和当前报错无关,后续测试时若出现查询问题再针对性排查即可。
内容的提问来源于stack exchange,提问作者caiiohenryk
相关产品推荐
相关产品推荐

