Commit b2a51255 by Florian Apolloner

Merge pull request #135 from benbacardi/develop

Added names() method to _TaggableManager
parents 57055742 5075638c
...@@ -54,6 +54,22 @@ playing around with the API. ...@@ -54,6 +54,22 @@ playing around with the API.
model with its own tagging through table, only other instances of the model with its own tagging through table, only other instances of the
same model will be returned. same model will be returned.
.. method:: names()
Convenience method, returning a ``ValuesListQuerySet`` (basically
just an iterable) containing the name of each tag as a string::
>>> apple.tags.names()
[u'green and juicy', u'red']
.. method:: slugs()
Convenience method, returning a ``ValuesListQuerySet`` (basically
just an iterable) containing the slug of each tag as a string::
>>> apple.slugs.names()
[u'green-and-juicy', u'red']
Filtering Filtering
~~~~~~~~~ ~~~~~~~~~
......
...@@ -172,6 +172,14 @@ class _TaggableManager(models.Manager): ...@@ -172,6 +172,14 @@ class _TaggableManager(models.Manager):
self.through.objects.get_or_create(tag=tag, **self._lookup_kwargs()) self.through.objects.get_or_create(tag=tag, **self._lookup_kwargs())
@require_instance_manager @require_instance_manager
def names(self):
return self.get_query_set().values_list('name', flat=True)
@require_instance_manager
def slugs(self):
return self.get_query_set().values_list('slug', flat=True)
@require_instance_manager
def set(self, *tags): def set(self, *tags):
self.clear() self.clear()
self.add(*tags) self.add(*tags)
...@@ -247,4 +255,4 @@ def _get_subclasses(model): ...@@ -247,4 +255,4 @@ def _get_subclasses(model):
# is not supported by Django 1.4 # is not supported by Django 1.4
if six.PY3: if six.PY3:
from django.utils.functional import total_ordering from django.utils.functional import total_ordering
TaggableManager = total_ordering(TaggableManager) TaggableManager = total_ordering(TaggableManager)
\ No newline at end of file
...@@ -313,6 +313,18 @@ class TaggableManagerTestCase(BaseTaggingTestCase): ...@@ -313,6 +313,18 @@ class TaggableManagerTestCase(BaseTaggingTestCase):
self.assertTrue(hasattr(field, 'related')) self.assertTrue(hasattr(field, 'related'))
self.assertEqual(self.food_model, field.related.model) self.assertEqual(self.food_model, field.related.model)
def test_names_method(self):
apple = self.food_model.objects.create(name="apple")
apple.tags.add('green')
apple.tags.add('red')
self.assertEqual(list(apple.tags.names()), ['green', 'red'])
def test_slugs_method(self):
apple = self.food_model.objects.create(name="apple")
apple.tags.add('green and juicy')
apple.tags.add('red')
self.assertEqual(list(apple.tags.slugs()), ['green-and-juicy', 'red'])
class TaggableManagerDirectTestCase(TaggableManagerTestCase): class TaggableManagerDirectTestCase(TaggableManagerTestCase):
food_model = DirectFood food_model = DirectFood
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment