问题
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