如何使用单个有效负载中的drf创建多个对象

时间:2018-01-23 22:12:25

标签: django django-rest-framework

在POST方法

下的视图中的#p>#
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.loads反序列化了,但这是我可能需要采取的路径。

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

1 个答案:

答案 0 :(得分:0)

这应该有效,如果你将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')])

此示例也适用于ModelSerializer。