发送使用嵌套关系的数据时,如何解决400错误?

时间:2019-07-17 19:52:19

标签: django django-rest-framework python-requests

我目前正在使用Django REST Framework作为API后端的Django应用程序,在尝试将JSON数据发送到服务器时,我不断收到400个错误。

我已经确保JSON文件中的所有字段名称都与我的API中的字段名称匹配,但是除此之外,除了对代码进行的少量修改外,我不确定还有其他尝试方法(例如,在die模型上将DieMeasurement字段设置为允许空白和空条目)。

这是我用来发送数据的脚本:

def post_die_measurement():
    with open('file.json') as obj:
        data = json.load(obj)
        requests.post(api_url_base + 'api-page/', data=data, headers={'Authorization': 'Token ' + api_token})

以下是与数据相关的两个相关模型:

class DieMeasurement(models.Model):
    # ...
    # fields
    # ...
    die = models.ForeignKey(Die, on_delete=models.CASCADE, blank=True, null=True)

class Result(models.Model):
    # ...
    # fields
    # ...
    die_measurement = models.OneToOneField(DieMeasurement, on_delete=models.CASCADE, related_name='results')

这是这些型号的我的序列化器:

class ResultSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = views.Result
        fields = ('set_v', 'dmm_value', 'actual_v', 'actual_a', 'time')

class DieMeasurementSerializer(serializers.HyperlinkedModelSerializer):
    results = ResultSerializer(many=False)

    class Meta:
        model = views.DieMeasurement
        fields = ('notes', 'tap', 'dmm_mode', 'laser_power', 'timestamp', 'die', 'results')

    def create(self, validated_data):
        results_data = validated_data.pop('results')
        measurement = DieMeasurement.objects.create(**validated_data)
        Result.objects.create(die_measurement=measurement, **results_data)
        return measurement

我发送的JSON数据的格式如下:

{
  "notes" : "",
  "tap" : 2,
  ...
  "results":{
      "set_v": [...]
      "set_a": [...]
      ...
  }
}

我的想法是,上面的脚本应加载与上述结构类似的JSON文件,以便当我将数据发布到API时,它会从文件中提取结果字段,然后创建一个具有结果对象及其链接的结果数据。相反,我遇到了前面提到的400错误。谁能帮我弄清楚我的方法出了什么问题?

1 个答案:

答案 0 :(得分:0)

由于声誉我无法对此帖子发表评论,但是我想提一下,如果客户端在其他端口上运行,则可能与CORS标头相关。

如果最终成为问题,有一个软件包https://pypi.org/project/django-cors-headers/可以帮助您解决此问题。