'Add a new tag to the handler.
Args:
tag (str or list): The name of the tag to add. If a list,
add several Tags.
category (str, optional): Category of Tag. `None` is the default category.
data (str, optional): Info text about the tag(s) added.
This can not be used to store object-unique info but only
eventual info about the text itself.
Notes:
If the tag + category combination matches an already
existing Tag object, this will be re-used and no new Tag
will be created.'

def add(self, tag=None, category=None, data=None):

    if (not tag):
        return
    for tagstr in make_iter(tag):
        if (not tagstr):
            continue
        tagstr = tagstr.strip().lower()
        category = (category.strip().lower() if category else category)
        data = (str(data) if (data is not None) else None)
        tagobj = self.obj.__class__.objects.create_tag(key=tagstr, category=category, data=data, tagtype=self._tagtype)
        getattr(self.obj, self._m2m_fieldname).add(tagobj)
        self._setcache(tagstr, category, tagobj)
