from rest_framework import serializers
+class ObfuscatedUserPasswordField(serializers.Field):
+ """
+ Sends *** string instead of password in the clear
+ """
+
+ def to_representation(self, value):
+ return "**********" if len(value) > 0 else ""
+
+ def to_internal_value(self, data):
+ return data
+
+
class UserSerializer(serializers.ModelSerializer):
+ password = ObfuscatedUserPasswordField()
user_permissions = serializers.SlugRelatedField(
many=True,
queryset=Permission.objects.all(),
fields = (
"id",
"username",
+ "password",
"first_name",
"last_name",
"date_joined",
def get_inherited_permissions(self, obj):
return obj.get_group_permissions()
+ def update(self, instance, validated_data):
+ if "password" in validated_data:
+ if len(validated_data.get("password").replace("*", "")) > 0:
+ print("set", validated_data.get("password"))
+ instance.set_password(validated_data.get("password"))
+ instance.save()
+ validated_data.pop("password")
+ super().update(instance, validated_data)
+ return instance
+
+ def create(self, validated_data):
+ groups = None
+ if "groups" in validated_data:
+ groups = validated_data.pop("groups")
+ user_permissions = None
+ if "user_permissions" in validated_data:
+ user_permissions = validated_data.pop("user_permissions")
+ password = None
+ if "password" in validated_data:
+ if len(validated_data.get("password").replace("*", "")) > 0:
+ password = validated_data.pop("password")
+ user = User.objects.create(**validated_data)
+ # set groups
+ if groups:
+ user.groups.set(groups)
+ # set permissions
+ if user_permissions:
+ user.user_permissions.set(user_permissions)
+ # set password
+ if password:
+ user.set_password(password)
+ user.save()
+ return user
+
class GroupSerializer(serializers.ModelSerializer):