As noted in issue #46151, the operator module was intended to and generally does expose internal functions, as they are coded in C in CPython, to Python itself. That issue created a small special-case exception to facilitate the use of attrgetter as a key function in .sort and other methods and functions. The previous option was to instead write a lambda function. I do not believe that #46151 intended to generally open operator and attrgetter to additions beyond the functions exposed.
attrgetter(string) returns a function meant to be called with an object that has an attribute named by the string. In the example above, attrgetter(a, 'b__name') must instead be attrgetter('b__name')(a). If one is passing a string linteral, as is the usual case I think, one can just as well, and even easier, pass the normal, legal python syntax. attrgetter('b.name')(a) works now, as I just verified.
If one wants to pass python object attribute names in string variables with app-specific non-pyobject syntax, such as s='b__name', it is not unreasonable to have the app or app user provide a conversion function. In this case,
def at(s): return s.replace('__', '.') # Convert Django ORM attr name to python object dotted name.
j = 'b__name'
# prints 'A' (verified)
(The use of .replace was suggested by sobolevn in a comment.