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

Django报错:TypeError: CharField对象无法JSON序列化,求解决

Django TypeError: Object of type CharField is not JSON serializable 问题排查与解决

问题描述

开发Django项目时触发错误:TypeError: Object of type CharField is not JSON serializable,项目核心代码如下:

models.py

from django.db import models
class Identity(models.Model):
    first_name=models.CharField(max_length=40,null=True,blank=False),
    last_name=models.CharField(max_length=40,null=True,blank=False),
    def __str__ (self):
        return self.first_name

serializers.py

from rest_framework import serializers
from .models import Identity

class IdentitySerializer(serializers.ModelSerializer):
    class Meta:
        model = Identity
        fields=('first_name','last_name',)

views.py

from rest_framework import generics
from .models import Identity
from .serializers import IdentitySerializer

class IdentityList(generics.ListCreateAPIView):
    queryset=Identity.objects.all()
    serializer_class=IdentitySerializer

class Identity(generics.RetrieveUpdateDestroyAPIView):
    queryset=Identity.objects.all()
    serializer_class=IdentitySerializer

应用urls.py

from django.urls import path,include;
from App import views

urlpatterns = [
    path('identity', views.IdentityList.as_view()),
    path('<int:ik>/', views.Identity.as_view()),
]

错误原因

核心问题在models.py的Identity类字段定义中:字段末尾的逗号让first_name和last_name变成了元组,而非Django预期的CharField实例。当DRF尝试序列化模型时,会试图将元组内的CharField对象转为JSON,从而触发序列化错误。

解决方法

修改models.py,去掉字段定义末尾的逗号:

from django.db import models
class Identity(models.Model):
    first_name=models.CharField(max_length=40,null=True,blank=False)
    last_name=models.CharField(max_length=40,null=True,blank=False)
    
    def __str__ (self):
        return self.first_name or ''  # 避免first_name为None时触发AttributeError

额外优化建议

  1. 修正URL参数名:应用urls.py中,RetrieveUpdateDestroyAPIView默认使用pk作为主键参数,需将<int:ik>/改为<int:pk>/:
    urlpatterns = [
        path('identity', views.IdentityList.as_view()),
        path('<int:pk>/', views.Identity.as_view()),
    ]
    
  2. 完善__str__方法:由于first_name允许为null,当字段值为None时直接返回会报错,建议返回默认空字符串或组合名字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:50:32