Добавление пользователя в группу Django Rest Framework - PullRequest
0 голосов
/ 07 мая 2020

Я хочу использовать API для создания пользователя и добавления его в выбранную группу. Но когда я выполняю запрос POST с помощью Postman, я получаю сообщение об ошибке, что эта группа уже существует, я не хочу создавать новую группу. Я просто хочу добавить к нему пользователя.

POST body

Это то, что я отправляю в сообщении.

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

Response

I продолжайте получать эту ошибку

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

Сериализатор

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)

Спасибо за помощь!

...