ContentTypes is the right approach.
This is because the ForignKey can only point to one type of table so you need to pass through the an intermediate table and do your split depending on the different type.
So model inheritance for the class hierarchy, but ContentType for the foreign keys.