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传递给每个序列化程序,并让它自动知道创建对象时要采用的键/值。这可能吗?
答案 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。