繁体   English   中英

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

[英]Object of type User is not JSON serializable

我正在为我的网页创建一个自动完整搜索,并尝试使用 ajax 调用从数据库中获取用户名称。

我的 AJAX 调用运行良好并转到指定的 URL。

我曾尝试使用 JSON 编码器,但这也不起作用。

我对 DJANGO 有点陌生。请帮忙

我的意见.py

def 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)

我的模型.py

class 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

我不知道你为什么通过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)

文档可以在这里找到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM