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

我正在为我的网页创建一个自动完整搜索,并尝试使用 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


qq_遁去的一_1
浏览 234回答 1
1回答

慕婉清6462132

我不知道你为什么要通过 查询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 DjangoJSONEncoderdata = json.loads(str_data)文档可以在这里找到。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python