我正在尝试遍历某些对象并将某些属性添加到要作为JSON发送回视图的数组中:
data = {}
camera_logs = CameraLog.objects.filter(camera_id=camera_id)
for log in camera_logs :
setattr(data, 'celsius', log.celsius)
setattr(data, 'fahrenheit', log.fahrenheit)
return JsonResponse(data)
我对Python很陌生,所以我不确定我是否在正确的轨道上。
答案 0 :(得分:1)
访问Python词典比使用setattr容易得多。 你有两个选择。创建一个ID为Keys的字典或只是一个简单的列表。
import json
data = {}
camera_logs = CameraLog.objects.filter(camera_id=camera_id)
for log in camera_logs :
data[log.id] = log.celsius
return Response(json.dumps(data))
在上面的解决方案中,您将获得一个ID为CameraLog的字典作为KEY,作为值,您将拥有摄氏度。基本上你的json看起来像这样:
{
1: 20,
2: 19,
3: 21
}
第二种方法是发送一个简单的值列表,但我想你想要有信息,什么相机有什么温度
import json
data = []
camera_logs = CameraLog.objects.filter(camera_id=camera_id)
for log in camera_logs :
data.append(log.celsius)
return Response(json.dumps(data))
编辑回答
如果你想要一个dicts列表,可以这样做:
import json
data = []
camera_logs = CameraLog.objects.filter(camera_id=camera_id)
for log in camera_logs :
data.append({
'camera_id': log.id,
'celsius': log.celsius,
'fahrenheit': log.fahrenheit
})
return Response(json.dumps(data))
答案 1 :(得分:0)
您只需使用.values_list
从查询集中选择所需的属性即可增强查询。
import json
camera_logs = CameraLog.objects.filter(camera_id=camera_id).values_list(
'celsius', 'fahrenheit')
data = [{"celcius": cel, "fahrenheit": fahr} for cel, fahr in camera_logs]
return Response(json.dumps(data))