Tagulous is a tagging library for Django which is based on
ForeignKey relationships. I've been developing and using it internally for several years, and have recently tidied it up for release; it supports Django 1.4 to 1.9a, on Python 2.7 to 3.5.
It started with a simple enough idea - rather than use generic relations like other tagging libraries, use a subclass of
ManyToManyField which supports assignment using tag strings, to allow things like this:
class Person(models.Model): name = models.CharField(max_length=255) skills = TagField() person = Person.objects.create(name='Bob', skills='run ...