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

Django中User对象无法JSON序列化问题求解

解决Django中User对象无法JSON序列化的问题

出现Object of type User is not JSON serializable错误的原因很直接:Django的User是模型实例,不属于Python原生的可JSON序列化类型(比如字典、列表),JsonResponse默认只能处理原生类型,所以得把User对象转成可序列化的格式,下面是几种实用的解决方法:

方法一:手动构造需要的字段字典

只提取前端需要的字段,避免返回敏感或无用数据,灵活性最高:

def edituser(request, id):
    member = User.objects.get(id=id)
    # 按需构造字典,只保留前端需要的字段
    user_info = {
        'id': member.id,
        'username': member.username,
        'email': member.email,
        'first_name': member.first_name,
        'last_name': member.last_name
    }
    return JsonResponse(user_info)

方法二:使用model_to_dict工具函数

Django提供了model_to_dict可以快速把模型转成字典,记得排除敏感字段(比如密码哈希):

from django.forms.models import model_to_dict

def edituser(request, id):
    member = User.objects.get(id=id)
    # 排除不需要返回的敏感/冗余字段
    user_info = model_to_dict(member, exclude=['password', 'last_login', 'is_superuser'])
    return JsonResponse(user_info)

方法三:自定义JSON编码器(适合频繁序列化模型的场景)

如果项目经常需要把模型转成JSON,可以自定义编码器类,复用性更强:

from django.core.serializers.json import DjangoJSONEncoder
from django.contrib.auth.models import User

class UserJSONEncoder(DjangoJSONEncoder):
    def default(self, obj):
        if isinstance(obj, User):
            return {
                'id': obj.id,
                'username': obj.username,
                'email': obj.email,
                'first_name': obj.first_name,
                'last_name': obj.last_name
            }
        # 其他类型交给父类处理
        return super().default(obj)

def edituser(request, id):
    member = User.objects.get(id=id)
    return JsonResponse(member, encoder=UserJSONEncoder, safe=False)

内容的提问来源于stack exchange,提问作者Amedeo De Longis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:09:59