如何在Django rest框架中更新对象

时间:2017-06-01 18:41:02

标签: django django-rest-framework

我有一个自定义用户模型,并且有自己的模型seriazer。它的modelviewset也可用于显示用户列表。

class UserSerializer(serializers.ModelSerializer):
    password1 = serializers.CharField(write_only=True, style={'input_type': 'password'})
    password2 = serializers.CharField(write_only=True, style={'input_type': 'password'})
    mobile = serializers.IntegerField()

    class Meta:
        model = User
        fields = ('id', 'first_name', 'last_name', 'email', 'mobile', 'password1', 'password2')

    def validate(self, data):
        if data['password1'] != data['password2']:
            raise serializers.ValidationError({'password1': 'Both password must be equal.'})
        return data

    def create(self, validated_data):
        if self.is_valid(True):
            return User.objects.create_user(
                validated_data.get('email'),
                validated_data.get('first_name'),
                validated_data.get('last_name'),
                validated_data.get('mobile'),
                validated_data.get('password1'),
            )

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

但是,我试图通过在PUT http方法中以json键值对格式发布模型的字段及其值来更新User对象。

{
    "first_name": "Some"
    "last_person": "name"
    "mobile": "0123456789" 
}

但这给了我一个400错误的请求错误:

{
    "password1": [
        "This field is required."
    ],
    "password2": [
        "This field is required."
    ],
    "email": [
        "This field is required."
    ]
}

如何仅使用部分模型字段更新对象?

2 个答案:

答案 0 :(得分:0)

  

如何仅使用部分模型字段更新对象?

与PUT相反,这就是PATCH的用途。 它将部分标志传递给序列化器将绕过缺失字段的验证。

答案 1 :(得分:0)

Serializer正在考虑将这些字段视为必填字段,您可能正在使用自定义模型null = False