Model inheritance in Django is a tricky subject. Django provides three ways to do model inheritance: abstract base classes, multi-table inheritance, and proxy models.
Warning
Django Abstract Base Classes ≠ Python Abstract Base Classes
Don’t confuse Django abstract base classes with the abstract base classes in the Python standard library’s abc module, as they have very different purposes and behaviors.
Here are the pros and cons of the three model inheritance styles. To give a complete comparison, we also include the option of using no model inheritance to begin with: