Ich versuche, mein Benutzermodell über Django Rest Framework-API-Aufrufe REST-fähig zu machen, damit ich Benutzer erstellen und deren Profile aktualisieren kann.
Da ich jedoch mit meinen Benutzern einen bestimmten Überprüfungsprozess durchlaufe, möchte ich nicht, dass die Benutzer den Benutzernamen aktualisieren können, nachdem ihr Konto erstellt wurde. Ich habe versucht, read_only_fields zu verwenden, aber das schien dieses Feld in POST-Vorgängen zu deaktivieren, sodass ich beim Erstellen des Benutzerobjekts keinen Benutzernamen angeben konnte.
Wie kann ich dies umsetzen? Relevanter Code für die API, wie sie jetzt existiert, ist unten.
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'password', 'email')
write_only_fields = ('password',)
def restore_object(self, attrs, instance=None):
user = super(UserSerializer, self).restore_object(attrs, instance)
user.set_password(attrs['password'])
return user
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
serializer_class = UserSerializer
model = User
def get_permissions(self):
if self.request.method == 'DELETE':
return [IsAdminUser()]
elif self.request.method == 'POST':
return [AllowAny()]
else:
return [IsStaffOrTargetUser()]
Vielen Dank!