【问题标题】:"This field is required." Django rest framework“这是必填栏。” Django 休息框架
【发布时间】:2022-06-25 20:14:53
【问题描述】:

我查看了堆栈中的每个答案,但找不到答案。我用 django rest 框架创建了一个 API,并进行了一些测量。我试图通过邮递员或 django API 发布 TreeSensor 测量值。天气测量值工作得很好,但在我的 TreeSensor 上我收到以下错误,即使它们除了字段之外是相同的。

{
    "soil_moisture_depth_1": [
        "This field is required."
    ],
    "soil_moisture_depth_2": [
        "This field is required."
    ]  }

序列化器:


class TreeSensorMeasurementSerializer(serializers.ModelSerializer):
    class Meta:
        model = TreeSensorMeasurement
        fields = ["sensor", "datetime", "soil_moisture_depth_1","soil_moisture_depth_2","soil_moisture_depth_1_filtered","soil_moisture_depth_2_filtered", "soil_temperature"]

class WeatherStationMeasurementSerializer(serializers.ModelSerializer):
    class Meta: 
        model = WeatherStationMeasurement
        fields = ["sensor", "datetime", "wind_speed", "current_rain", "wind_direction", "solar_radiation", "air_temperature", "air_humidity", "air_pressure", "luminosity", "battery", "dew_point"]

API:

    ########### TreeSensorMeasurement Api ###########
    def post(self,request, *args, **kwargs):

        data = {
            'sensor' : request.data.get('sensor'),
            'datetime' : request.data.get('datetime'),
            'soi_moisture_depth_1' : request.data.get('soil_moisture_depth_1'),
            'soi_moisture_depth_2' : request.data.get('soil_moisture_depth_2'),
            'soi_moisture_depth_1_filtered' : request.data.get('soil_moisture_depth_1_filtered'),
            'soi_moisture_depth_2_filtered' : request.data.get('soil_moisture_depth_2_filtered'),
            'soil_temperature' : request.data.get('soil_temperature'),
        }
        serializer = TreeSensorMeasurementSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status = status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    ########### WeatherStationMeasurement Api ###########
    def post(self,request, *args, **kwargs):

        data = {
            'sensor' : request.data.get('sensor'),
            'datetime' : request.data.get('datetime'),
            'wind_speed' : request.data.get('wind_speed'),
            'current_rain' : request.data.get('current_rain'),
            'wind_direction' : request.data.get('wind_direction'),
            'solar_radiation' : request.data.get('solar_radiation'),
            'air_temperature' : request.data.get('air_temperature'),
            'air_humidity' : request.data.get('air_humidity'),
            'air_pressure' : request.data.get('air_pressure'),
            'luminosity' : request.data.get('luminosity'),
            'battery' : request.data.get('battery'),
            'dew_point' : request.data.get('dew_point'),     
        }
        serializer = WeatherStationMeasurementSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status = status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

【问题讨论】:

    标签: django post django-rest-framework django-serializer


    【解决方案1】:

    我认为发生错误是因为您更改了字段名称。

    ########### TreeSensorMeasurement Api ###########
    def post(self,request, *args, **kwargs):
    
        data = {
            'sensor' : request.data.get('sensor'),
            'datetime' : request.data.get('datetime'),
            # Here I changed the field names
            'soil_moisture_depth_1' : request.data.get('soil_moisture_depth_1'),
            'soil_moisture_depth_2' : request.data.get('soil_moisture_depth_2'),
            'soil_moisture_depth_1_filtered' : request.data.get('soil_moisture_depth_1_filtered'),
            'soil_moisture_depth_2_filtered' : request.data.get('soil_moisture_depth_2_filtered'),
            'soil_temperature' : request.data.get('soil_temperature'),
        }
        serializer = TreeSensorMeasurementSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status = status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    

    soi_... 字段名称应更改为soil_...

    【讨论】:

    • 该死.. 非常感谢。我打了这么久的头,这只是一个错字……我只是没注意到。我会尽量小心一点。再次感谢您指出。
    猜你喜欢
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2015-02-25
    • 2016-04-25
    相关资源
    最近更新 更多