diff --git a/evennia/typeclasses/managers.py b/evennia/typeclasses/managers.py index 0064d07821..bb1206b28e 100644 --- a/evennia/typeclasses/managers.py +++ b/evennia/typeclasses/managers.py @@ -278,7 +278,6 @@ class TypedObjectManager(idmapper.manager.SharedMemoryManager): query.append(("db_tags__db_key", key.lower())) if category: query.append(("db_tags__db_category", category.lower())) - print "get_by_tag query:", query return self.filter(**dict(query)) def get_by_permission(self, key=None, category=None): diff --git a/evennia/typeclasses/tags.py b/evennia/typeclasses/tags.py index 9d32bf0bac..7901098ca0 100644 --- a/evennia/typeclasses/tags.py +++ b/evennia/typeclasses/tags.py @@ -303,8 +303,10 @@ class TagHandler(object): category = category.strip().lower() if category is not None else None # This does not delete the tag object itself. Maybe it should do - # that when no objects reference the tag anymore (how to check)? - tagobj = self.obj.db_tags.filter(db_key=tagstr, db_category=category) + # that when no objects reference the tag anymore (but how to check)? + # For now, tags are never deleted, only their connection to objects. + tagobj = getattr(self, self._m2m_fieldname).filter(db_key=tagstr, db_category=category, + db_model=self._model, db_tagtype=self._tagtype) if tagobj: getattr(self.obj, self._m2m_fieldname).remove(tagobj[0]) self._delcache(key, category) @@ -319,10 +321,10 @@ class TagHandler(object): category. """ - if not category: - getattr(self.obj, self._m2m_fieldname).clear() - else: - getattr(self.obj, self._m2m_fieldname).filter(db_category=category).delete() + query = {"db_model": self._model, "db_tagtype": self._tagtype} + if category: + query["db_category"] = category + getattr(self.obj, self._m2m_fieldname).filter(**query).delete() self._cache = {} self._catcache = {} self._cache_complete = False