在Django序列化器的单个字段中合并多个外键

问题描述

我的模型。py

camera_choices = (
    ('0','Entry'),('1','Exit'),)
class Device(models.Model):
    DeviceId = models.AutoField(primary_key=True,db_column='DeviceId')
    DeviceName = models.CharField(max_length=50,null=True,default=None,blank=True)
    DeviceCode = models.CharField(max_length=25,null=False,blank=False)
    IpAddress = models.CharField(max_length=15,blank=True)
    Description = models.CharField(max_length=250,blank=True)
    DefaultAccess = models.BooleanField(default=True,blank=True)
    EntryCamera = models.ForeignKey(Camera,on_delete=models.CASCADE,db_column='EntryCameraId',related_name="entry_camera",blank=True,default=None)
    ExitCamera = models.ForeignKey(Camera,db_column='ExitCameraId',related_name="exit_camera",default=None)
    DeviceType = models.ForeignKey(DeviceType,db_column='DeviceTypeId')
    DeviceStatus = models.SmallIntegerField(default=1,blank=True)

    class Meta:
        db_table = "Device"


class Camera(models.Model):
    CameraId = models.AutoField(primary_key=True,db_column='CameraId')
    CameraName = models.CharField(max_length=50,unique=True)
    CameraUrl = models.URLField()
    CameraType = models.CharField(max_length=30,choices=camera_choices)

    class Meta:
        db_table = "Camera"

我的serialiser.py

class DeviceListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Device
        fields = ['DeviceId','DeviceCode','DeviceName','IpAddress','Description','DefaultAccess','DeviceStatus','DeviceType','EntryCamera','ExitCamera']
        depth = 1

我的views.py

def device_list(request):
    try:
        device = Device.objects.all()
        serializer = DeviceListSerializer(device,many=True,read_only=True)
        return Response(serializer.data,status=status.HTTP_200_OK)
    except Exception as ex:
        logging.getLogger("error_logger").exception(repr(ex))

我得到了答复

[  
 {
        "DeviceId": 3,"DeviceCode": "DevTest3","DeviceName": "","IpAddress": "","Description": "","DefaultAccess": false,"DeviceStatus": 1,"DeviceType": {
            "DeviceTypeId": 1,"DeviceType": "Devicetype1","DeviceTypeStatus": true
        },"EntryCamera": {
            "CameraId": 1,"CameraName": "Camera1","CameraUrl": "http://www.dgdge","CameraType": "0"
        },"ExitCamera": {
            "CameraId": 2,"CameraName": "Camera2","CameraUrl": "http://www.hth","CameraType": "1"
        }
    }
]

是否有可能获得如下所示的输出。在设备模型2中是指具有相同模型的外键的字段。有可能把他们聚在一起吗?

[  
 {
        "DeviceId": 3,"Cameras":[
            {
            "CameraId": 1,{
            "CameraId": 2,"CameraType": "1"
        }]
 }

]

我还如何获取未在设备型号中使用的摄像机列表(分别进入和退出)。 ?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)