首页 > 解决方案 > 获取超过 1 个模型的序列化数据

问题描述

我有 3 个模型

class Camera(models.Model):
    CameraId = models.AutoField(primary_key=True, db_column='CameraId')
    CameraName = models.CharField(max_length=50)

class DeviceType(models.Model):
    DeviceTypeId = models.AutoField(primary_key=True, db_column='DeviceTypeId')
    DeviceType = models.CharField(max_length=50)

class Device(models.Model):
    DeviceId = models.AutoField(primary_key=True, db_column='DeviceId')
    DeviceName = models.CharField(max_length=50)
    CameraId = models.ForeignKey(Camera, on_delete=models.CASCADE, db_column='CameraId', 
                           related_name='cameras')
    DeviceTypeId = models.ForeignKey(DeviceType, on_delete=models.CASCADE, db_column='DeviceTypeId')

我想要设备序列化 JSON 数据的结果,与设备相关

{
   'DeviceId'   : DeviceId ,
   'DeviceName' : DeviceName ,
   'CameraId'   : CameraId,
   'CameraName': CameraName ,
   'DeviceTypeId' :DeviceTypeId ,
   'DeviceType'  :DeviceType 
}

我该怎么做 ?

标签: djangodjango-rest-frameworkdjango-serializer

解决方案


您必须使用带注释的查询集覆盖基于类的视图(APIView 或 ListAPIView)中的 get_queryset 方法。像这样的东西:

def get_queryset(self):
    queryset = Device.objects.all().annotate(camera_name = F('camera__camera_name'), device_type = F('device_type__device_type'))
    return queryset

不要忘记从 django.db.models 导入 F

此外,您应该将 camera_name 和 device_type 字段添加到您的序列化程序中。


推荐阅读