Nic*_*lah 3 python django post serialization
我在使用序列化器时遇到一些问题。我正在调用一个 post 方法,我希望它调用序列化器。我还想将用户发送到序列化器。我的发帖方法是:
def post(self, request, *args, **kwargs):
serializer = ResourceListSerializer(context={'request': request}, data={})
serializer.is_valid(raise_exception=True)
serializer.save(creator=request.user)
Run Code Online (Sandbox Code Playgroud)
但它似乎没有在序列化器中获取数据。在序列化器中, self.validated_data 似乎是空的。这是序列化器上的代码:
def save(self, **kwargs):
"""
Update `project` and `resource_type` fields in database.
"""
resources = self.validated_data.get('resources')
if resources is not None and len(resources) > 0:
self.validated_data['project'] = self.validated_data['resources'][0].project
self.validated_data['resource_type'] = self.validated_data['resources'][0].resource_type
try:
project = self.data.get('project')
return super(ResourceListSerializer, self).save(**kwargs)
except:
try:
project = self.validated_data['project']
return super(ResourceListSerializer, self).save(**kwargs)
except:
raise serializers.ValidationError("Resource List should belong to a Project.")
Run Code Online (Sandbox Code Playgroud)
关于如何正确调用序列化器有什么建议吗?
在实例化序列化器时传递data,而不是context.
def post(self, request, *args, **kwargs):
serializer = ResourceListSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save(creator=request.user)
Run Code Online (Sandbox Code Playgroud)
您只需要context传递额外的上下文。除非您的序列化程序中有访问 的自定义代码self.context,否则您不需要它。