def tag_model(cls, admin_cls=None, field_name='tags', sort_tags=False,
              select_field=False, auto_add_admin_field=True,
              admin_list_display=True):
    """
    tag_model accepts a number of named parameters:

    admin_cls   If set to a subclass of ModelAdmin, will insert the tag
                field into the list_display and list_filter fields.
    field_name  Defaults to "tags", can be used to name your tag field
                differently.
    sort_tags   Boolean, defaults to False. If set to True, a pre_save
                handler will be inserted to sort the tag field alphabetically.
                This is useful in case you want a canonical representation
                for a tag collection, as when yo're presenting a list of
                tag combinations (e.g. in an admin filter list).
    select_field If True, show a multi select instead of the standard
                CharField for tag entry.
    auto_add_admin_field If True, attempts to add the tag field to the admin
                class.
    """
    try:
        from tagging.registry import register as tagging_register
    except __HOLE__:
        from tagging import register as tagging_register

    cls.add_to_class(field_name, (
        TagSelectField if select_field else TagField
    )(field_name.capitalize(), blank=True))
    # use another name for the tag descriptor
    # See http://code.google.com/p/django-tagging/issues/detail?id=95 for the
    # reason why
    try:
        tagging_register(cls, tag_descriptor_attr='tagging_' + field_name)
    except AlreadyRegistered:
        return

    if admin_cls:
        if admin_list_display:
            admin_cls.list_display.append(field_name)
        admin_cls.list_filter.append(field_name)

        if auto_add_admin_field and hasattr(
                admin_cls, 'add_extension_options'):
            admin_cls.add_extension_options(_('Tagging'), {
                'fields': (field_name,)
            })

    if sort_tags:
        pre_save.connect(pre_save_handler, sender=cls)

# ------------------------------------------------------------------------
dataset/ETHPy150Open feincms/feincms/feincms/contrib/tagging.py/tag_model