如何在我的数据库中添加数据以使用 django 和 DRF

how to add data in my db for using django and DRF

我正在制作一个 API,它使用 DRF 接收 Arduino 的数据并将其发送到 Android。首先,我们成功创建了一个 API 来显示存储在 DB 中的值。但是,生成将 Arduino 的数据发送到 DB 的 API 时存在问题。通常输入数据,但不存储此数据。你能告诉我我的代码的问题吗?这是我的代码

views.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)

serializers.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')

models.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)