【问题标题】:Django queryset list that have expanded relational model data已扩展关系模型数据的 Django 查询集列表
【发布时间】:2018-06-08 15:33:27
【问题描述】:

在我的 Django webapp 中,我有基于函数的 API,可以显示分页列表。问题是我希望列表中的每一行都有扩展的关系字段输出。

这是我的出勤模型:

class Attendance(models.Model):
    CHECKIN = 1
    CHECKOUT = 2
    ATTENDANCE_TYPE_CHOICES = (
        (CHECKIN, "Check In"),
        (CHECKOUT, "Check Out"),
    )
    employee = models.ForeignKey(Employee)
    company = models.ForeignKey(Company)
    activity_type = models.IntegerField(choices = ATTENDANCE_TYPE_CHOICES, default=CHECKIN)

这是我的列表 API 的一部分,我在其中定义要显示的字段并进行分页。

employee_list = Employee.objects.filter(company = auth_employee.employee.company.id).values("id","employee","company","activity_type").order_by('id') 

page = request.GET.get('page', request.POST['page'])
paginator = Paginator(employee_list, request.POST['page_limit'])

try:
    employees = paginator.page(page)
except PageNotAnInteger:
    employees = paginator.page(request.POST['page'])
except EmptyPage:
    employees = paginator.page(paginator.num_pages)

return Response(list(employees), status=status.HTTP_200_OK)          

输出是这样的列表,但没有员工详细信息。

[
  {
    "id": 14,
    "employee": 15,
    "company": 15,
    "activity_type": 1,
  },
  {
    "id": 15,
    "employee": 15,
    "company": 15,
    "activity_type": 2,
  }
]

我的预期输出,我如何得到这样的东西?

[
  {
    "id": 14,
    "employee": {
                 "id":"2",
                 "name":"Michael"
                },
    "company": 15,
    "activity_type": 1,
  },
  {
    "id": 15,
    "employee": {
                 "id":"2",
                 "name":"Jeniffer"
                },
    "company": 15,
    "activity_type": 2,
  }
]

我怎样才能生成一个列表来显示上面的关系数据以显示在 json 响应中?

【问题讨论】:

    标签: json django model django-queryset relational


    【解决方案1】:

    您所描述的是序列化,在这种情况下是嵌套序列化,其中 django 模型关系引用以您上面描述的结构进行序列化。

    django 没有开箱即用的方法来做到这一点。 django-rest-framework 项目用他们的nested serializers 解决了这个问题

    如果您正在开发一个将结果输出到 JSON 以供 Django 模板以外的某些服务或客户端使用的 API,我会认真考虑将其添加到您的项目中。

    【讨论】:

      猜你喜欢
      • 2017-06-07
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 2023-03-16
      相关资源
      最近更新 更多