сериализовать словарь в поле для конечной точки rest API django rest framework - PullRequest
0 голосов
/ 04 августа 2020

У меня есть сериализатор, в котором я хочу отобразить словарь, я также конвертирую этот словарь в формат JSON, но получаю следующую ошибку:

Объект типа Job не JSON сериализуемый.

Код выглядит следующим образом:

jobs_by_hour = serializers.SerializerMethodField()
    
 def get_jobs_by_hour(self, obj):
    jobs = Job.objects.annotate(hour=ExtractHour('dt_start'))
    res = defaultdict(lambda: [])
    for x in jobs:
        res[x.hour].append(x)
    return json.dumps(res)

Я новичок в этом и не знаю, как исправить эту проблему, любая помощь приветствуется. в конечном итоге с помощью этого словаря я хочу отображать данные, сгруппированные по часам, поэтому я получаю 24 списка вакансий

1 Ответ

1 голос
/ 04 августа 2020

Вы добавляете объект набора запросов. Вам нужно добавить сериализованные данные. Примерно так должно работать.

 def get_jobs_by_hour(self, obj):
    jobs = Job.objects.annotate(hour=ExtractHour('dt_start'))
    res = defaultdict(lambda: [])
    for x in jobs:
        res[x.hour].append(JobSerializer(x).data)
    return json.dumps(res)

Добавьте поле hour в JobSerializer по умолчанию *.

...