为了账号安全,请及时绑定邮箱和手机立即绑定

User 类型的对象不是 JSON 可序列化的

User 类型的对象不是 JSON 可序列化的

qq_遁去的一_1 2022-01-05 19:58:17
我正在为我的网页创建一个自动完整搜索,并尝试使用 ajax 调用从数据库中获取用户名称。我的 AJAX 调用运行良好并转到指定的 URL。我曾尝试使用 JSON 编码器,但这也不起作用。我对 DJANGO 有点陌生。请帮忙我的意见.pydef autocomplete(request):if request.is_ajax():    q = request.GET.get('search', '').capitalize()    search_qs = Profile.objects.filter(user__username__startswith=q)    results = []    print (q)    for r in search_qs:        results.append(r.user)    data= json.dumps(list(results), cls=DjangoJSONEncoder)else:    data = 'fail'mimetype = 'application/json'return HttpResponse(data, mimetype)我的模型.pyclass Profile(models.Model):user = models.OneToOneField(User, on_delete=models.CASCADE)image = models.ImageField(default='default.jpg', upload_to='profile_pics')def __str__(self):    return f'{self.user.username} Profile'我得到的错误TypeError: Object of type User is not JSON serializable[] "GET /ajax_calls/search/?**term=he** HTTP/1.1" 500 15860
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

我不知道你为什么要通过 查询Profile,在那里你可以直接通过 查询User。我认为正确的实现应该是这样的:


from django.core.serializers import serialize 


users = User.objects.filter(username__startswith=q)


str_data = serialize('json', users, cls=DjangoJSONEncoder). # Or you don't need to provide the `cls` here because by default cls is DjangoJSONEncoder


data = json.loads(str_data)

文档可以在这里找到。


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号