django以所需的方式为api序列化模型

时间:2018-01-25 17:57:10

标签: python json django

我有一个模型aio,其中包含简单的员工信息。

我还有另一个带有日程信息的模型Staff

Schedule

我按日期收到日程表

class Schedule(models.Model):
    staff = models.ForeignKey(Staff, models.SET_NULL, blank=True, null=True)
    attendance = models.DateTimeField()

现在我想为api返回它的json。目前我在做

schedules = Schedule.objects.filter(attendance__date=today)

它给了我一些回应:

raw_data = serializers.serialize("python", schedules)
return JsonResponse(raw_data, safe=False)

`

但是我希望json没有模型名称而不是外键上的ID我希望用户信息和id而不是外键。

`
[
  {
    model: "schedule.schedule",
    pk: 11,
    fields: {
      staff: 1,
      attendance: "some_date",
    }
  }

]

我是否可以从序列化器中获取此信息,我必须制作一个自定义词典并在我的设计中添加所有字段并将其转储?

帮助将非常受欢迎:)

1 个答案:

答案 0 :(得分:0)

首先,作为建议,我认为你应该查看Django Rest Framework。 DRF为构建REST API提供了全面且非常好的API。否则,你最终会在大部分时间重新发明轮子。

作为对实际问题的回答,您需要从数据库中获取相关的行(或行),并在返回JsonResponse之前自行序列化。一个例子是这样的(注意,因为我不知道你的Staff模型的字段,我假设它有一个名为name的字段:

from django.http import JsonResponse


class Schedule(models.Model):
    staff = models.ForeignKey(Staff, models.SET_NULL, blank=True, null=True)
    attendance = models.DateTimeField()


schedules = Schedule.objects.select_related('staff')

serialized_schedules = []

for schedule in schedules:
    serialized_schedules.append({
        'id': schedule.pk,
        'fields': {
            'staff': {
                'id': schedule.staff.id,
                'name': schedule.staff.name,
            },
            'attendance': schedule.attendance,
        },
    })

return JsonResponse(serialized_schedules, safe=False)