2017-06-23 1 views
0

Ich brauche Code zum Bearbeiten von Benutzerdetails wie Vorname, Nachname mit Hilfe von APIView-Klasse basiert. Die serializers.py und ansichten.py sind unter, aber es macht nicht die Änderungen entsprechend den Benutzerdetails. Ich gebe Token für die Benutzerauthentifizierung weiter. Jede Hilfe wird geschätzt.Bearbeiten von Benutzerdetails in Python Django Rest Framework

Serializers.py

class UserEditSerializer(serializers.Serializer): 
    email = serializers.EmailField(required=True) 
    first_name = serializers.CharField(required=True) 
    last_name = serializers.CharField(required=True) 

    def update(self, validated_data, instance): 

     instance.first_name = validated_data.get('first_name') 
     instance.email = validated_data.get('email') 
     instance.last_name = validated_data.get('last_name') 
     instance.save() 
     return instance() 

Views.py

class UserEditProfile(APIView): 
    authentication_classes = (authentication.TokenAuthentication,) 
    permission_classes = (permissions.IsAuthenticated,) 

    def get_object(self): 
     return self.request.user 

    def post(self, request): 
     self.object = self.get_object() 
     serializer = UserEditSerializer(data=request.data) 
     if serializer.is_valid(): 
      self.object.save() 
      return Response(serializer.data, status=status.HTTP_200_OK) 
     else: 
      return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST) 

Antwort

0

Wie würde der Serializer weiß, es muss einen Benutzer aktualisieren, wenn Sie es nicht bieten?

serializer = UserEditSerializer(data=request.data) 

sollte sein:

serializer = UserEditSerializer(self.object, data=request.data) 

Edit: Entfernen Sie auch die() nach return instance

+0

Überprüfen Sie auch die Update-Signatur Ihres Serializers anhand der Dokumentation. Die Argumentreihenfolge ist falsch. – Linovia

+0

Danke Ich habe es angewendet, aber es gibt einen Integritätsfehler wie zuvor - IntegrityError unter/users/edit-profile UNIQUE Constraint fehlgeschlagen: auth_user.id –

0

Diese Ansicht funktioniert. Danke Linovia

class UserEditProfile(APIView): 
    authentication_classes = (authentication.TokenAuthentication,) 
    permission_classes = (permissions.IsAuthenticated,) 

    def post(self, request): 
     obj = User.objects.get(id=request.user.id) 
     serializer = UserEditSerializer(obj, data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_200_OK) 
     else: 
      return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
Verwandte Themen