TaggedManager and TaggedQuerySet with chainable tagged() methods implemented with django-tagging

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)

More like this

  1. Easier chainability with custom QuerySets by bendavis78 1 year, 3 months ago
  2. Multiple querysets by t_rybik 3 years, 3 months ago
  3. WithTag Tag by versae 4 years, 11 months ago
  4. Custom managers with chainable filters by itavor 5 years, 4 months ago
  5. SearchableManager by stephen_mcd 3 years, 3 months ago

Comments

fish2000 (on February 25, 2010):

EDIT: changed 'id' to 'pk' in tagged() to keep it from choking on non-default keys.

#

(Forgotten your password?)