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.
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. –
Danke, Vladir! Ich habe diesen Beitrag mit meinem views.py- und urls.py-Code aktualisiert. – user1564009