Because the list_display field will display four types of values, one of which is a " string representing a ModelAdmin method that accepts one argument, the model instance".
Basically, Django supports displaying a computed value, and it knows how to look for such a method and then display it when you explicitly name it in the list_display field. So when it sees ‘inventory_status’ in your list_display field, it looks around for it. Django doesn’t find it in the model of the Product Class, but it does find it in the ProductAdmin Class. Since this is a value it accepts, it then computes the field for each product.
You can check it and the other four types in Django’s docs (their example):