Я понимаю, что это основное, но я дергаю за волосы.
В моих предыдущих проектах это всегда можно было обновить. Я проверил прошлые проекты, чтобы сравнить, но это не обновляет и продолжает запрашивать значения. Я хотел бы, чтобы он принимал значения, если не ноль, и сохранял предыдущие существующие значения.
также пытался partial=True
, но это дает пустым в моих полях, что не то, что я хочу.
class UserRetrieveUpdateAPIView(generics.RetrieveUpdateAPIView):
serializer_class = UserSerializer
permission_classes = (IsAuthenticated, )
queryset = User.objects.all()
def get_object(self):
return self.request.user
def update(self, request, *args, **kwargs):
context = { 'user': request.user }
serializer = self.serializer(request.user, data=request.data)
if serializer.is_valid(raise_exception=True):
self.perform_update(serializer)
instance = serializer.instance
self.clear_cache(request.user)
Так что ни один не должен быть тем, что было раньше
print (serializer) #<User: demo@email.com>, data={'first_name': None, 'last_name': 'stupid', 'email': None, 'password': None}
Serializer
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('first_name','last_name','email','password')
def create(self, validated_data):
user = User.objects.create(
username=validated_data.get('username'),
email=validated_data.get('email')
)
user.save()
return user
def partial_update(self, request, *args, **kwargs):
kwargs['partial'] = True
return self.update(request, *args, **kwargs)
def update(self, instance, validated_data):
first_name = validated_data.pop('first_name', None)
print (first_name)
for key, value in validated_data.items():
if value != None:
setattr(instance, key, value)
instance.save()
return instance