Объект типа User не поддерживает сериализацию в формате JSON - PullRequest
2 голосов
/ 10 апреля 2019

Я создаю автоматический поиск по своей веб-странице и пытаюсь получить имя пользователя из базы данных с помощью вызовов ajax.

Мой вызов AJAX работает нормально и идет по указанному URL.

Я пытался использовать кодировщик JSON, но это также не сработало.

Я немного новичок в DJANGO. Пожалуйста, помогите

Мой views.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)

Мой models.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

1 Ответ

1 голос
/ 10 апреля 2019

Я не знаю, почему вы запрашиваете через 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)

Документация может быть найдена здесь.

...