Исключение поля из вложенного сериализатора

для получения информации о пользователе я использую сериализатор с вложенными сериализаторами, но у меня есть проблема, которая заключается в том, что я не знаю, как исключить некоторые поля, которые не нужны, в данном случае пароль пользователя, есть ли способ исключить это поле?

вот код конечной точки и сериализаторов

конечная точка

@api_view(['GET'])
@has_permission_decorator('view_team_member')
def getTeamMembers(request, pk):
    try:
        token = decodeJWT(request)
        team_member = TeamMember.objects.filter(pk=pk, company_id=token['company_id'])
        print(team_member)
        serializer = TeamMemberSerializer(team_member, many=True)
        return Response({'data': serializer.data}, status=status.HTTP_200_OK)
    except TeamMember.DoesNotExist:
        return Response({'Error': 'Not Found'}, status=status.HTTP_404_NOT_FOUND)
    except Exception as e:
        return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

сериализатор члена команды

class TeamMemberSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    team = TeamSerializer(read_only=True)
    team_role = TeamRoleSerializer(read_only=True)
    company = CompanySerializer(read_only=True)

    class Meta:
        model = TeamMember
        fields = "__all__"
        read_only_fields = ['state', 'created_at', 'updated_at']
        required_fields = ['team', 'user', 'team_role']

сериализатор пользователя

class UserSerializer(serializers.ModelSerializer):
    role = serializers.CharField(style={'input_type': 'text'}, write_only=True)
    password2 = serializers.CharField(style={'input_type': 'text'}, write_only=True)

    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email', 'password', 'password2', 'company', 'role']
        extra_kwargs = {
            'username': {'required': True},
            'email': {'required': True},
            'first_name': {'required': True},
            'last_name': {'required': True},
            'role': {'required': True},
            'company': {'required': True},
            'password': {'required': True},
            'password2': {'required': True},
        }

    def save(self):
        password = self.validated_data['password']
        password2 = self.validated_data['password2']
        if password != password2:
            raise serializers.ValidationError({'password': 'Passwords must match'})

        if User.objects.filter(email=self.validated_data['email']).exists():
            raise serializers.ValidationError({'Email': 'Email already exists'})

        account = User(email=self.validated_data['email'],
                       company=self.validated_data['company'],
                       first_name=self.validated_data['first_name'],
                       last_name=self.validated_data['last_name'])
        account.set_password(password)
        account.save()
        user = User.objects.get(id=account.id)
        try:
            assign_role(user, self.validated_data['role'])
        except Exception as e:
            user.delete()
            raise serializers.ValidationError('invalid role')


ответ

{
    "data": [
        {
            "id": 1,
            "user": {
                "first_name": "anderson",
                "last_name": "worker",
                "email": "worker@gmail.com",
                "password": "pbkdf2_sha256$320000$CPoWGbsmw7xOKugwP4ygI7$4VpOy9LEDvDCWRHHn/GS6utuT9pYvtOGx+2aP7+IoI0=",
                "company": 1
            },
            "team": {
                "id": 1,
                "description": "frontend-team",
                "state": 1,
                "created_at": "2022-08-01T00:54:05.732842Z",
                "updated_at": null,
                "company": 1
            },
            "team_role": {
                "id": 1,
                "description": "backend-dev",
                "state": 1,
                "created_at": "2022-08-01T00:54:39.197085Z",
                "updated_at": null,
                "company": 1
            },
            "company": {
                "id": 1,
                "description": "infinity tech",
                "state": 1,
                "created_at": "2022-08-01T00:51:31.420658Z",
                "updated_at": null
            },
            "state": 1,
            "created_at": "2022-08-01T01:09:07.457835Z",
            "updated_at": null
        }
    ]
}

Я хочу удалить поле пароля в объекте пользователя

Я думаю, что вы можете установить атрибут exclude в UserSerializer.

class UserSerializer(serializers.ModelSerializer):
    ...

    class Meta:
        ...
        exclude = ('password',)
    ...

Вы можете создать новый пользовательский сериализатор для использования с TeamMemberSerializer.

сериализатор пользователя

class UserSerializer2(serializers.ModelSerializer):
   class Meta:
      model = User
      fields = ['first_name', 'last_name', 'email', 'company']

сериализатор члена команды

class TeamMemberSerializer(serializers.ModelSerializer):
    user = UserSerializer2(read_only=True)
    team = TeamSerializer(read_only=True)
    team_role = TeamRoleSerializer(read_only=True)
    company = CompanySerializer(read_only=True)

    class Meta:
        model = TeamMember
        fields = "__all__"
        read_only_fields = ['state', 'created_at', 'updated_at']
        required_fields = ['team', 'user', 'team_role']
Вернуться на верх