from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import generic class Place(models.Model): name = models.CharField('name') content_type = models.ForeignKey(ContentType) # Child model child = generic.GenericForeignKey(fk_field='id') def save(self, **kwargs): if not self.pk: self.content_type = ContentType.objects.get_for_model(self) super(Place, self).save(**kwargs) class Restaurant(Place): pass