Я хочу использовать 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)
Спасибо за помощь!