Я хотел бы обновить определенные свойства пользователя (скажем, имя и фамилия)
мой объект json через запрос PUT будет выглядеть так
{
"user" : {
"first_name": "Jack",
"last_name": "shnider",
"password":"admin123"
"email" : "foo@google.com"
},
"employee_zip" : 12345
}
Вот так выглядит мой вид (я бы хотел обновить существующие поля до этих новых полей).
Это сериализатор
class Serializer_UpdateUser(ModelSerializer):
class Meta:
model = User
fields = ('first_name','last_name','password')
class Serializer_UpdateEmployer(ModelSerializer):
user = Serializer_UpdateUser()
class Meta:
model = modelEmployer
fields = [
'user',
'employer_zip',
]
Это вид:
class UpdateProfile_RetrieveUpdateAPIView(RetrieveUpdateAPIView):
queryset = modelEmployer.objects.all()
serializer_class = Serializer_UpdateEmployer
lookup_field = 'user__email'
permission_classes = [permissions.AllowAny]
def update(self, request, *args, **kwargs):
instance = self.get_object() #------>I have the object that I would like to update
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True) #--->Success
Теперь я хотел бы получить проверенные поля (json содержит только те поля, которые были обновлены). Я знаю, если я сделаю что-то подобное
serializer.save
Я бы вернул модельEmployer, но вместо этого я получил эту ошибку
AssertionError at /api/employer/update_profile/employerA@gmail.com/ The `.update()` method does not support writable nested fields by default. Write an explicit `.update()` method for serializer `Employer.api.serializers.Serializer_ListEmployer`, or set `read_only=True` on nested serializer fields. Request Method:
У меня два вопроса
1-Почему сбой сохранения?
2-Как я могу получить проверенные данные из вышеуказанного сериализатора?