如何使用 DRF 从单个有效负载创建多个对象



# 在 POST 方法下的视图中

json_data = json.loads(request.body.decode('utf-8'))
display_name = json_data['displayName']
job_url = json_data['url']
start_time = json_data['timestamp']
execution_url = json_data['url']
execution_number = json_data['number']
    # #create stage execution
    # serializer = StageExecutionSerializer(request.data)
    # if serializer.is_valid():
    #     serializer.save()
    # #create platform
    # serializer = StageExecutionSerializer(request.data)
    # if serializer.is_valid():
    #     serializer.save()

我正在努力找出最有效的方法来获取request.data并从这些数据中利用DRF创建对象。

将display_name、job_url等传递给序列化程序对我来说没有意义,因为它们已经被 json.load 反序列化,但这是我可能必须采取的路线。

理想的方案是将request.data传递给每个序列化程序,并让它自动知道在创建对象时要采用哪些键/值。 这可能吗?

这应该有效,如果您将 dict 传递给序列化器,那么它只会考虑它在元类中定义的字段。

您会注意到,如果您执行以下操作:

class MySerializer(serializers.Serializer):
    a = serializers.CharField(max_length=3)
    b = serializers.CharField(max_length=3)
    class Meta:
        fields = ('a', 'b')
s = MySerializer(data={'a':1, 'b':2, 'c':3})
s.is_valid()
# This will print the original data dict
print(s.initial_data) 
# > {'a': 1, 'b': 2, 'c': 3}
# This will render the data according to serializer and fields `to_representation` method, so no extra fields
print(s.data)  
# > {'a': '1', 'b': '2'}
# This will print the validated field data, so no extra fields
print(s.validated_data)  
# > OrderedDict([('a', '1'), ('b', '2')])

此示例也适用于模型序列化程序。

最新更新