Adding a user to a group Django Rest Framework

余生长醉 提交于 2020-05-17 05:56:51

问题


I want to use an API to create a user and add it to a selected group. But when I execute the POST request with Postman I get an error saying this group already exists, I don't want to make a new group. I just want to add the user to it.

POST body

This is what I send in the post.

{
    "email": "user@example.com",
    "username": "Laerie",
    "first_name": "Laerie",
    "last_name": "koek",
    "password": "password",
    "groups": [{"name":"user"}]
}

Response

I keep getting this error

{
    "groups": [
        {
            "name": [
                "group with this name already exists."
            ]
        }
    ]
}

Serializer

class CustomUserSerializer(serializers.ModelSerializer):
    email = serializers.CharField(
        required=True
    )
    username = serializers.CharField(required=True)
    password = serializers.CharField(min_length=8, write_only=True)
    first_name = serializers.CharField()
    last_name = serializers.CharField()
    groups = GroupSerializer(many=True)

    class Meta:
        model = CustomUser
        fields = ('id', 'email', 'username', 'first_name', 'last_name', 'password', 'groups')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):

        password = validated_data.pop('password', None)
        group = Group.objects.get(name=validated_data.pop('groups', None))

        user = CustomUser.objects.create(
            username=validated_data['username'],
            email=validated_data['email'],
            first_name=validated_data['first_name'],
            last_name=validated_data['last_name']
        )

        if group is not None:
            user.groups.add(group)
        else:
            user.groups.add('user')

        if password is not None:
            user.set_password(password)
        user.save()
        return user

Views.py

class CustomUserView(APIView):
    permission_classes = [IsAuthenticated, IsAdmin, ]

    def get(self, request, format='json'):
        queryset = CustomUser.objects.all()
        serializer = CustomUserSerializer(queryset, many=True)
        filterset_fields = ['id', 'name', 'email', 'groups']
        return Response(serializer.data, status=status.HTTP_200_OK)

    def post(self, request, format='json'):
        print(request.data['groups'])
        serializer = CustomUserSerializer(data=request.data)
        if serializer.is_valid():
            user = serializer.save()
            if user:
                json = serializer.data
                return Response(json, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Thank you for helping out!

来源:https://stackoverflow.com/questions/61658462/adding-a-user-to-a-group-django-rest-framework

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!