Исключение TypeError при конвертации в json

Что то произошло и никак не могу разобраться в чем проблема при конвертации словаря в json в одной из вьюшек для DRF

def languages(requset):
    if requset.method == "GET":
        langs = dict(settings.LANGUAGES)
        return JsonResponse(json.dumps(langs))

Переменная langs содержит обыкновенный словарь

{'en': 'English', 'en-uk': 'English (UK)', 'ru': 'Russian', 'nb': 'Norwegian Bokmål'}

Но при обращении к данной конечной точке я получаю следующее

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Python39\lib\json\__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "C:\Python39\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Python39\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Python39\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type __proxy__ is not JSON serializable

Как можно видеть из вьюшки - это не модель, которую бы можно просто сериализировать и избежать данной проблемы. Эти данные забираются из языковых настроек для всего проекта.

Кто в курсе как решить?


Ответы (1 шт):

Автор решения: Amgarak

Полученные значения в словаре langs являются объектами типа proxy, которые не могут быть сериализованы в JSON.

Перед сериализацией их необходимо преобразовать в строки.

langs = {str(key): str(value) for key, value in langs.items()}
→ Ссылка