def save_form_data(self, instance, data):
        from mezzanine.generic.models import Keyword
        related_manager = getattr(instance, self.name)
        # Get a list of Keyword IDs being removed.
        old_ids = [str(a.keyword_id) for a in related_manager.all()]
        new_ids = data.split(",")
        removed_ids = set(old_ids) - set(new_ids)
        # Remove current AssignedKeyword instances.
        related_manager.all().delete()
        # Convert the data into AssignedKeyword instances.
        if data:
            data = [related_manager.create(keyword_id=i) for i in new_ids]
        # Remove keywords that are no longer assigned to anything.
        Keyword.objects.delete_unused(removed_ids)
        super(KeywordsField, self).save_form_data(instance, data)
The ``KeywordsWidget`` field will return data as a string of
dataset/ETHPy150Open stephenmcd/mezzanine/mezzanine/generic/fields.py/KeywordsField.save_form_data