django - 获取超过 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
}
我该怎么做 ?
解决方案
您必须使用带注释的查询集覆盖基于类的视图(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 字段添加到您的序列化程序中。
推荐阅读
- javascript - 重新分配变量或返回新对象?
- ios - Xcode 链接器错误和 pod install 仅指示 4 个依赖项中的 3 个
- ios - 滑动手势动作后如何重新加载主视图控制器
- python - 从给定的 str 中查找 str 第一次出现的索引
- r - 基于另一列的值的新 DF 列。通过检查具有最高值的预先存在的列的名称获得可能的新值
- reactjs - 命名导出/导入与绝对路径导入
- ios - iOS应用程序在调试模式下崩溃,在发布模式下工作
- typescript - Webpack / Typescript 未正确解析 for-await 循环
- php - 为什么php-pdo不插入值
- dart - 如何一次加载资产文件夹中的所有图像?