django - 如何在我的数据库中添加数据以使用 django 和 DRF
问题描述
我正在制作一个 API,它使用 DRF 来接收 Arduino 的数据并将其发送到 Android。首先,我们成功地创建了一个显示存储在 DB 中的值的 API。但是,在生成将 Arduino 的数据发送到 DB 的 API 时存在问题。通常输入数据,但不存储该数据。你能告诉我我的代码的问题吗?这是我的代码
视图.py
from .models import arduino
from .serializers import arduinoSerializers
from rest_framework.viewsets import ViewSet, ModelViewSet
from rest_framework.response import Response
class arduinoToAndroidViewSet (ViewSet) :
def dataSend (self, request) :
user = self.request.user
queryset = arduino.objects.filter(name=user)
serializer = arduinoSerializers(queryset, many=True)
return Response(serializer.data)
class arduinoToDatabaseViewSet (ModelViewSet) :
serializer_class = arduinoSerializers
def get_queryset(self) :
user = self.request.user
return arduino.objects.filter(name=user)
def dataReceive(self, request) :
queryset = get_queryset()
serializer = arduinoSerializers(queryset, many=True)
serializer.save()
return Response(serializer.data)
序列化程序.py
from rest_framework import serializers
from .models import arduino
class arduinoSerializers (serializers.ModelSerializer) :
name = serializers.CharField(source='name.username', read_only=True)
class Meta :
model = arduino
fields = ('name', 'temp', 'humi')
模型.py
from django.db import models
from django.contrib.auth.models import User
class arduino (models.Model) :
name = models.ForeignKey(User, related_name='Username', on_delete=models.CASCADE, null=True)
temp = models.FloatField()
humi = models.FloatField()
def __str__ (self) :
return self.name.username
解决方案
如果您所指的问题是您的dataReceive(self, request)
方法尽管具有有效 queryset
的数据但没有保存数据(无法理解为什么要再次查询和保存保存对象),那是因为您必须始终is_valid()
在尝试保存之前调用。所以应该是
def dataReceive(self, request) :
queryset = get_queryset()
serializer = arduinoSerializers(queryset, many=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
推荐阅读
- c++ - 尝试制作clockType类问题时出错
- javascript - 如何在 React 中切换图像滚动(如在 Apple 网站上)?
- react-router - 使用 React Router 有条件地重定向
- django - 表单不会出现在网站的管理端,并且对原因感到困惑,并想知道其他人是否能看到原因
- reactjs - 清除浏览器缓存后 Firebase.auth().onstateChanged() 不起作用
- python - 使用 python pymongo 查询嵌套文档 mongodb
- kubernetes - 跨多个工作人员的 Kubernetes HA 数据
- javascript - 使用 ml5js 训练简单神经网络时遇到问题
- ios - Cordova iOS 不再加载 three.js .glb 文件
- javascript - 如何设置画布图像透明度