tag = models.ForeignKey(Tag, verbose_name=_('tag'), related_name='items')
content_type = models.ForeignKey(ContentType, verbose_name=_('content type'))
object_id = models.PositiveIntegerField(_('object id'), db_index=True)
object = generic.GenericForeignKey('content_type', 'object_id')
objects = TaggedItemManager()


class Meta:
    unique_together = ('tag', 'content_type', 'object_id'),
verbose_name = _('tagged item')
verbose_name_plural = _('tagged items')
How to Model a Foreign Key in a Reusable Django App?