【发布时间】:2020-08-26 11:50:05
【问题描述】:
我的模型.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, null=True, default=None, blank=True)
Description = models.CharField(max_length=250, null=True, default=None, blank=True)
DefaultAccess = models.BooleanField(default=True, null=True, blank=True)
EntryCamera = models.ForeignKey(Camera, on_delete=models.CASCADE, db_column='EntryCameraId',
related_name="entry_camera", null=True, blank=True, default=None)
ExitCamera = models.ForeignKey(Camera, on_delete=models.CASCADE, db_column='ExitCameraId',
related_name="exit_camera", null=True, blank=True, default=None)
DeviceType = models.ForeignKey(DeviceType, on_delete=models.CASCADE, db_column='DeviceTypeId')
DeviceStatus = models.SmallIntegerField(default=1, null=True, 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"
我的序列化器.py
class DeviceListSerializer(serializers.ModelSerializer):
class Meta:
model = Device
fields = ['DeviceId', 'DeviceCode', 'DeviceName', 'IpAddress', 'Description', 'DefaultAccess', 'DeviceStatus',
'DeviceType', 'EntryCamera', 'ExitCamera']
depth = 1
我的意见.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,
"DeviceCode": "DevTest3",
"DeviceName": "",
"IpAddress": "",
"Description": "",
"DefaultAccess": false,
"DeviceStatus": 1,
"DeviceType": {
"DeviceTypeId": 1,
"DeviceType": "Devicetype1",
"DeviceTypeStatus": true
},
"Cameras":[
{
"CameraId": 1,
"CameraName": "Camera1",
"CameraUrl": "http://www.dgdge",
"CameraType": "0"
},
{
"CameraId": 2,
"CameraName": "Camera2",
"CameraUrl": "http://www.hth",
"CameraType": "1"
}]
}
]
我如何获取设备模型中未使用的相机列表(分别进入和退出)。 ?
【问题讨论】:
标签: django django-models django-rest-framework django-serializer