首页 文章

当ModelSerializer将数据保存到模型时?

提问于
浏览
1

我有这个模型和序列化器:

class User(Model):
    name = Charfield()
    is_available = BooleanField()

class UserSerializer(ModelSerializer):
    class Meta():
        model = User
        fields = '__all__'

我也有这个视图功能:

@api_view('GET', 'PATCH')
def current_user(request):
    serializer = UserSerializer(request.user, context={'request': request})
    if request.method == 'PATCH':
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
    return Response(serializer.data)

PATCH请求返回200 OK,但不更改用户数据 . 看起来调用serializer.save()不足以将数据保存到模型中 . 那么,当ModelSerializer将数据保存到模型时呢?

1 回答

  • 2

    要更新对象,您应该将它的实例作为第一个参数传递给序列化程序,否则序列化程序将创建新对象 . 此外,您需要添加 partial=True 以允许部分更新,而不应该提供所有必需字段(不仅仅是实际更新)来更新用户 . 将代码更改为:

    if request.method == 'PATCH':
        user = request.user
        serializer = UserSerializer(user, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
    

相关问题