As far as i can tell after a few hours of using it this seems to be a fairly good django app:

http://code.google.com/p/django-tagging/

However, setting it up is a bit of trial and error. Here are the steps i took to get it running.

</p>

  1. Download it via svn like said in the documentation

  2. Install with sudo python setup.py install

  3. add it to installed apps in settings.py

  4. go to your model of choice and import tagging and
    from tagging.fields import TagField

  5. register a model with it with: tagging.register(Entries, tag_descriptor_attr=’etags‘)
    here is the first important point, see that etags? Remember it.

  6. create a TagField in your model named tags like:
    tags = TagField()
    The important thing is, the name has to be tags and tag_descriptor_attr has to have a different value than tags or any other column name in your model
    This seems to be a bug, look at: http://code.google.com/p/django-tagging/issues/detail?id=95

  7. python manage.py syncdb

  8. If your model already exists fire up phpmyadmin and add the column tags yourself as varchar(255)

  9. Almost done, now you have to setup a getter and setter method to get around that issue 95 like:
    def set_tags(self, tags):
    Tag.objects.update_tags(self, tags)
    def get_tags(self, tags):
    return Tag.objects.get_for_object(self)

  10. Thats it, for more information on retrieving in templates i found i nice post here:
    http://tylerlesmann.com/2009/mar/09/adding-tagging-django-10-views-and-templates/

</ol>