from django.db import models from django.core.exceptions import ObjectDoesNotExist from tagging.models import Tag class TaggedQuerySet(models.query.QuerySet): def tagged(self, name=None): if name: try: t = Tag.objects.filter(name=name).get() except ObjectDoesNotExist: return self.none() else: return self.filter( pk__in=t.items.get_by_model(self.model, t).values('pk').query ) return self.none() class TaggedManager(models.Manager): def __init__(self, fields=None, *args, **kwargs): super(TaggedManager, self).__init__(*args, **kwargs) self._fields = fields def get_query_set(self): return TaggedQuerySet(self.model, self._fields) def tagged(self, name=None): return self.get_query_set().tagged(name)