我试图通过rest
API将数据添加到数据库中,但是在添加数据时遇到一些问题。因此,基本上我已经从管理页面添加了此数据,但是我想通过使用请求从其他python添加此数据。当我发送发布请求时,它表明已添加该请求,但传感器数组为空
[
{
"id": 1,
"name": "Stacja 1",
"delay_time": 123,
"sensor": [
{
"id": 1,
"name": "DS18B20",
"type": "temperature",
"date_created": "2020-06-26T16:30:28.657804Z",
"value": 123.0,
"index": 0
},
{
"id": 2,
"name": "DHT22",
"type": "Humidity",
"date_created": "2020-06-26T16:30:44.043847Z",
"value": 1233.0,
"index": 1
},
{
"id": 3,
"name": "DS18B20",
"type": "temperature",
"date_created": "2020-06-26T16:37:07.304961Z",
"value": 1233.0,
"index": 0
}
]
},
{
"id": 2,
"name": "Stacja 1",
"delay_time": 300,
"sensor": []
}
]
models.py
from django.db import models
class Sensor(models.Model):
name = models.CharField(max_length=20, default='null', blank=True)
type = models.CharField(max_length=20, default='null', blank=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
value = models.FloatField(null=True)
index = models.IntegerField(null=True)
def __str__(self):
return str(self.name) + ' ' + str(self.type) + ' ' + ' index:' + str(self.index) + ' value:' + str(self.value)
class Station(models.Model):
name = models.CharField(max_length=20, default='null', blank=True)
delay_time = models.IntegerField(null=True)
sensor = models.ManyToManyField(Sensor, null=True, default='null', blank=True)
serializers.py
from rest_framework import serializers
from .models import Sensor, Station
class SensorSerializer(serializers.ModelSerializer):
class Meta:
model = Sensor
fields = '__all__'
class StationSerializer(serializers.ModelSerializer):
class Meta:
model = Station
fields = '__all__'
depth = 1
adddata.py
import json
import requests
import serial
import time
ser = serial.Serial(
port='/dev/ttyS0',
baudrate = 9600,
bytesize=serial.EIGHTBITS,
stopbits=serial.STOPBITS_ONE,
parity=serial.PARITY_NONE,
timeout=1,
)
payload={
"username":["xxxxx"],
"password":["xxxxxxxxx"]
}
while 1:
x = ser.readline()
try:
payload2 = json.loads(x)
r = requests.post('http://192.168.1.16/api/token/', data=payload)
jsondata = r.json()
headers = {}
headers['Authorization'] = 'Bearer ' + jsondata['access']
print(jsondata['access'])
r = requests.post('http://192.168.1.16/data/station/', headers=headers, data=payload2)
print(r.text)
except:
continue
payload2看起来像
{
"name": "Stacja 1",
"delay_time": 300,
"sensor": [
{
"name": "DS18B20",
"type": "temperature",
"value": 26.5,
"index": 0
},
{
"name": "DHT22",
"type": "temperature",
"value": 26.5,
"index": 1
},
{
"name": "DHT22",
"type": "humidity",
"value": 66,
"index": 1
},
{
"name": "battery",
"type": "voltage",
"value": 2.104492,
"index": 2
}
]
}
我已经尝试过使用单站和多个传感器,但是我想您将能够进行相应的修改。
dataset
{
"name": "Stacja 1",
"delay_time": 300,
"sensors": [
{
"name": "DHT22",
"type": "temperature",
"value": 26.5,
"index": 1
},
{
"name": "DHT22",
"type": "humidity",
"value": 66,
"index": 1
},
{
"name": "battery",
"type": "voltage",
"value": 2.104492,
"index": 2
}
]
}
serializers.py
class SensorSerializer(serializers.ModelSerializer):
class Meta:
model = Sensor
fields = '__all__'
class StationSerializer(serializers.ModelSerializer):
sensors = SensorSerializer(many=True)
class Meta:
model = Station
fields = '__all__'
def create(self, validated_data):
sensor_data = validated_data.pop('sensors')
station = Station.objects.create(**validated_data)
station.save()
for sensor in sensor_data:
s = Sensor.objects.create(**sensor)
station.sensors.add(s.id)
return station
Django文档建议,在将对象与任何模型关联之前,需要先保存对象ManyToManyField
。因此station
,在添加对象ManyToMany
关系之前,需要先对其进行保存。
这是我的 views.py
class AddStationAndSensorsView(CreateAPIView):
serializer_class = StationSerializer
def post(self, request):
serializer = StationSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({'message': ['Added']}, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_406_NOT_ACCEPTABLE)
注意: 我已在模型中重命名sensor
为。sensors``Station
models.py
from django.db import models
class Sensor(models.Model):
name = models.CharField(max_length=20, default='null', blank=True)
type = models.CharField(max_length=20, default='null', blank=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
value = models.FloatField(null=True)
index = models.IntegerField(null=True)
def __str__(self):
return str(self.name) + ' ' + str(self.type) + ' ' + ' index:' + str(self.index) + ' value:' + str(self.value)
class Station(models.Model):
name = models.CharField(max_length=20, default='null', blank=True)
delay_time = models.IntegerField(null=True)
sensors = models.ManyToManyField(Sensor, null=True, default='null', blank=True)
def __str__(self):
return self.name
问题内容: 我有一个嵌套列表,例如: 在将此列表插入数据库之前,我想在新列的每一行中添加一个具有相同值的“列”,例如: 例如,当原始的嵌套列表可能有数百行时,什么是最好的方法? 问题答案: 为什么不更改原始列表(如果您要这样做):
我正在努力学习颤振,但我在JSON序列化上被卡住了。我在YouTube和Flitter文档中学习了一些教程,但我在序列化方面遇到了一些困难。你能帮我一点忙吗,这是为了教育目的,所以我更感兴趣的是背后的理论,而不是解决方案本身,然而,即使只有解决方案,我认为我可以尝试理解这个过程。我应该提到,我知道这一点,但在我的例子中,数据中有嵌套对象,这让我感到困惑。 作为响应数据的样本,它基本上是一个商店,每
问题内容: 将空列添加到pandas对象的最简单方法是什么?我偶然发现的最好的东西是 有没有那么不合常理的方法? 问题答案: 如果我理解正确,则应填写作业:
向pandas对象添加空列的最简单方法是什么?我偶然发现的最好的东西是 有没有一种不那么反常的方法?
问题内容: 我正在尝试向从创建的数组中添加一列。在这种情况下,它是一个数组:(行,列)。 我想添加第九列。空或零都无所谓。 问题答案: 我认为您的问题是您希望就地添加该列,但是由于存储的numpy数据的原因,它的作用是创建连接数组的副本 所以你需要保存输出: 替代方式: 我相信这三个函数(以及)之间的唯一区别是未指定when的默认行为: 假设 假设除非输入为1d,否则 如果输入为1d,则假定在添加