【发布时间】:2021-12-07 00:05:07
【问题描述】:
在我的 DRF 应用中,我有以下模型、序列化程序和视图。
models.py
class Log(models.Model):
plant = models.ForeignKey(Plant, on_delete=models.CASCADE)
date_time = models.DateTimeField()
water_consumption = models.PositiveSmallIntegerField()
elec_consumption = models.PositiveSmallIntegerField()
序列化器.py
class ConsumptionSerializer(serializers.ModelSerializer):
class Meta:
model = Log
fields = ("water_consumption", "elec_consumption")
views.py
class ConsumptionViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated, ]
serializer_class = ConsumptionSerializer
def get_queryset(self):
# Get params from url
start_date = self.request.query_params.get('start_date')
end_date = self.request.query_params.get('end_date')
# Make sure params are not null
if start_date is not None and end_date is not None:
queryset = queryset.filter(date_time__range=[start_date, end_date])
return queryset
else:
raise ValidationError({"ERROR": ["No params found in url"]})
这行得通,它会在 JSON 中输出类似这样的内容:
[
{
"water_consumption": 1,
"electrical_consumption": 1
},
{
"water_consumption": 1,
"electrical_consumption": 1
},
{
"water_consumption": 1,
"electrical_consumption": 1
},
]
我想要实现的是在这些数据旁边接收一些聚合数据,如下所示:
{
"total_water_consumption": 3,
"total_elec_consumption": 3,
"detailed_logs": [{
"water_consumption": 1,
"electrical_consumption": 1
},
{
"water_consumption": 1,
"electrical_consumption": 1
},
{
"water_consumption": 1,
"electrical_consumption": 1
}]
}
我应该如何自定义查询集以添加总值?
提前谢谢你。
【问题讨论】:
标签: python django django-rest-framework