title: Automatically registering Django model in a separate table
body: <p>In my Django app I have several models representing different types of content:</p>
  
  <pre><code>class Video(models.Model):
      title = models.CharField(max_length=50)
  
  class Playlist(models.Model):
      videos = models.ManyToManyField(Video)
  </code></pre>
  
  <p>Now I would like to create an easy way of adding <code>like</code>'s to instances of the two models, that can be easily set up like in the <a href="https://github.com/shanbay/django-vote" rel="nofollow noreferrer">django-vote</a> app:</p>
  
  <pre><code>class Video(models.Model):
      title = models.CharField(max_length=50)
      likes = LikeManager()
  
  class Playlist(models.Model):
      videos = models.ManyToManyField(Video)
      likes = LikeManager()
  </code></pre>
  
  <p>But unlike the <a href="https://github.com/shanbay/django-vote/blob/master/vote/managers.py#L159" rel="nofollow noreferrer">django-vote method</a>, which relies on a <strong>single table</strong> <code>Votes</code> linking all votes to different objects via <code>GenericRelation</code> field, I want to automatically create a separate table for each model, like <code>VideoLikes</code> and <code>PlaylistLikes</code>. This can have significant impact on performance when number of objects of either model becomes very large, or if other likeable models are added in the future.</p>
  
  <p>Is there a way of abstracting to this level, or do I have to create an abstract <code>Like</code> model, and then create <code>VideoLike</code>, <code>PlaylistLike</code> inheriting from the abstract <code>Like</code> model?</p>