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)
Comments
EDIT: changed 'id' to 'pk' in tagged() to keep it from choking on non-default keys.
#