if tag not in current_tags:
self.intermediary_table_model._default_manager.create(tag=tag, content_object=obj)
+ def remove_tag(self, obj, tag):
+ """
+ Remove tag from an object.
+ """
+ content_type = ContentType.objects.get_for_model(obj)
+ self.intermediary_table_model._default_manager.filter(content_type__pk=content_type.pk,
+ object_id=obj.pk, tag=tag).delete()
+
def get_for_object(self, obj):
"""
Create a queryset matching all tags associated with the given
WHERE %(tagged_item)s.content_type_id = %(content_type_id)s
AND %(tagged_item)s.object_id IN
(
- SELECT temporary.object_id
+ SELECT *
FROM (
SELECT %(tagged_item)s.object_id
FROM %(tagged_item)s, %(tag)s
HAVING COUNT(%(tagged_item)s.object_id) = %(tag_count)s
) AS temporary
)
+ AND %(tag)s.id NOT IN (%(tag_id_placeholders)s)
%(extra_where)s
GROUP BY %(tag_columns)s
%(min_count_sql)s