Sorting by <FK>_id in admin ChangeList view

Recently I noticed that the admin ChangeList view does not allow sorting by the <FK>_id attribute (as in ForeignKey.get_attname) out-of-the-box.

I am aware there are other ways to make this work, as explained in my recent question in the “Using Django” category. However, I was wondering whether this was by design, or whether it is simply a feature that has not been implemented yet.

Could anyone shed some light on that?

Perhaps there’s a good reason sorting by <FK>_id does not work, but, if not, could this be implemented in the future?

A very quick-and-dirty implementation could look like the following (to be inserted into

def result_headers(cl):
    # Set ordering for attr that is a property, if defined.
    if isinstance(attr, property) and hasattr(attr, 'fget'):
        admin_order_field = getattr(attr.fget, 'admin_order_field', None)
    elif isinstance(attr, str):
        # check if attr represents a foreign key id (<FK>_id)
            field = cl.model._meta.get_field(attr)
            if hasattr(field, 'attname') and field.attname == attr:
                admin_order_field = attr
        except FieldDoesNotExist:
    if not admin_order_field:
        is_field_sortable = False

Please note, I did not run any tests or look for possible side effects. There are probably much better solutions, but the above should give an impression of what I’m after.

Thanks for your help.