序列化程序django中的嵌套模型



我无法根据测量中的设备ID获得每个设备的最后一次测量。如果有人能建议我如何实现这一点?

型号

class Devices(models.Model):
deviceid = models.AutoField(db_column='deviceId', primary_key=True)  # Field name made lowercase.
devicename = models.CharField(db_column='deviceName', unique=True, max_length=128)  # Field name made lowercase
devicestatus = models.IntegerField(db_column='deviceStatus')  # Field name made lowercase.

Class Meta:
managed = False
db_table = 'devices'

class Measurements(models.Model):
measurementid = models.AutoField(db_column='measurementId', primary_key=True)  # Field name made lowercase.
deviceid = models.ForeignKey(Devices,   models.DO_NOTHING, related_name="measurment_details", db_column='deviceId')  # Field name made lowercase.
measurement = models.CharField(max_length=64, blank=True, null=True)


class Meta:
managed = False
get_latest_by = 'measurementtime'
db_table = 'measurements'

序列化程序

class MeasurmentsSerializer(serializers.ModelSerializer):
class Meta:
model = Measurements
fields = ('measurementid','measurement')

class DeviceSerializer(serializers.ModelSerializer):
latestmeasurment = serializers.SerializerMethodField()
count = 0 


def get_latestmeasurment(self, obj):
qs = Measurements.objects.using('@@@').last()
serializer = MeasurmentsSerializer(instance=qs, many=False)
self.count = 1 + self.count
print(self.count , serializer.data )
return serializer.data

class Meta:
model = Devices
fields = ("devicename", 'latestmeasurment')

视图

class RetrieveAllDevicesView(viewsets.ModelViewSet):
http_method_names = ['get']
permission_classes = [permissions.IsAuthenticated]
serializer_class = DeviceSerializer
queryset = Devices.objects.using('@@@')

在序列化程序中,您可以看到基元调试的计数:

1 {'measurementid': 2942080, 'measurement': '35.0'}
2 {'measurementid': 2942080, 'measurement': '35.0'}
3 {'measurementid': 2942080, 'measurement': '35.0'}
4 {'measurementid': 2942080, 'measurement': '35.0'}
5 {'measurementid': 2942080, 'measurement': '35.0'}
6 {'measurementid': 2942080, 'measurement': '35.0'}
7 {'measurementid': 2942080, 'measurement': '35.0'}
8 {'measurementid': 2942080, 'measurement': '35.0'}
9 {'measurementid': 2942080, 'measurement': '35.0'}
10 {'measurementid': 2942080, 'measurement': '35.0'}

视图中的JSON响应:

在此处输入图像描述

def get_latestmeasurment(self, obj):
device_measurements = obj.measurment_details.all()
last_measurement = device_measurements.order_by('id').last()
serializer = MeasurmentsSerializer(last_measurement)
return serializer.data

你得到了每个设备的所有测量值,排序后,你会得到最后一个作为你的最后一个测量

最新更新