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)