在 Django Rest 框架中调用序列化器

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)

关于如何正确调用序列化器有什么建议吗?

Dan*_*per 5

在实例化序列化器时传递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,否则您不需要它。