Ответ 1
Я добавлю немного более подробный ответ.
Стоит отметить, что метод QuerySet.values_list()
фактически не возвращает список, а объект типа django.db.models.query.ValuesListQuerySet
, чтобы для поддержания цели Django для ленивой оценки, то есть запрос БД, необходимый для создания "списка", фактически не выполняется до тех пор, пока объект не будет оценен.
Несколько раздражающе, однако, этот объект имеет собственный метод __repr__
, который делает его похожим на список при распечатке, поэтому не всегда очевидно, что объект не является действительно списком.
Исключение в вопросе вызвано тем, что пользовательские объекты не могут быть сериализованы в JSON, поэтому сначала вам нужно будет преобразовать его в список,...
my_list = list(self.get_queryset().values_list('code', flat=True))
... тогда вы можете преобразовать его в JSON с помощью...
json_data = json.dumps(my_list)
Вам также придется разместить полученные данные JSON в объекте HttpResponse
, который, очевидно, должен иметь Content-Type
of application/json
, с...
response = HttpResponse(json_data, content_type='application/json')
..., который вы можете вернуть из своей функции.