2016-04-12 2 views
1

Ich habe den Serializer unten gemacht. Wenn ich POST zum Erstellen oder GET zum Abrufen der Instanz verwende, dann ist alles in Ordnung. Aber wenn ich die Methode PATCH zum Aktualisieren einer Instanz verwende, erhält die Methode update ein leeres dict als valided_data. Was ist der Grund dafür? Wenn ich einen grundsätzlich falschen Ansatz verwende, zeige mir bitte den richtigen Weg. Vielen Dank!Django-REST-Framework. Update wird leer valided_data

class UserSerializer(serializers.ModelSerializer): 
    # password = serializers.CharField(write_only=True) 

    class Meta: 
     model = get_user_model() 
     fields = ('id', 'email', 'first_name', 'last_name', 'password',) 
     read_only_fields = ('is_staff', 'is_superuser', 'is_active',) 
     extra_kwargs = {'password': {'write_only': True}} 

    def create(self, validated_data): 
     password = validated_data.pop('password') 
     user = self.Meta.model(**validated_data) 
     user.set_password(password) 
     user.is_active = True 
     user.save() 
     return user 

    def update(self, instance, validated_data): 
     print validated_data # returns {} - empty dict 
     return instance 

Ich benutze ModelViewSet als Ansicht:

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

urls.py:

router = routers.DefaultRouter() 
router.register(r'accounts', UserViewSet, base_name='User') 

urlpatterns = [ 
    url(r'', include(router.urls)), 
] 

Zum Testen ich den PyCharm REST-Client verwenden und "first_name = Name" als Anfrageparameter senden für PATCH/accounts/1/ Der Ausdruck auf Serializer oben zeigt mir "{}". Das benötigte Konto ist vorhanden und der Serializer empfängt die Zielinstanz.

+2

Getestet habe ich es nur mit einigen Code, den ich habe, und es funktionierte einwandfrei. Könnten Sie bitte Ihre Sichtweise zeigen? und vielleicht der Test? Danke im Voraus. –

+0

Danke, Vladir! Ich habe diesen Beitrag mit meinem views.py- und urls.py-Code aktualisiert. – user1564009

Antwort

1

Ok, ich habe eine Lösung für Ihren Fall gefunden. Ich habe dieses Tool vorher noch nicht benutzt, obwohl ich seit mehr als einem Jahr PyCharm benutze. Es ist ein großartiges Werkzeug, aber es gibt nicht viel Dokument über die Details. Lösung:

  • Zuerst müssen wir die Anfrage als JSON (Content-Type: application/json) über den Antrag, einen Blick here, es ist gut dort erklärt schicken, wie es geht.
  • Zweitens, in der dritten Spalte Request Body wählen Sie die Option und legen Sie die Daten mit dieser Struktur {"first_name": "Name"} (es war der schwierigere Teil für mich).

Für weitere Informationen lesen Sie in diesem Screenshot ich unten bin Befestigung:

enter image description here

+0

Danke, Vladir! Es funktioniert, wenn ich JSON sende! – user1564009

+0

Sie sind herzlich willkommen! –

Verwandte Themen