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

时间:2018-03-29 08:39:16

标签: django django-rest-framework

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

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 个答案:

答案 0 :(得分:2)

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

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