我有一个自定义用户模型,并且有自己的模型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."
]
}
如何仅使用部分模型字段更新对象?
答案 0 :(得分:0)
如何仅使用部分模型字段更新对象?
与PUT相反,这就是PATCH的用途。 它将部分标志传递给序列化器将绕过缺失字段的验证。
答案 1 :(得分:0)
Serializer正在考虑将这些字段视为必填字段,您可能正在使用自定义模型null = False
。