def __get__(self, instance, owner=None): """ Tag getter. Returns an instance's tags if accessed on an instance, and all of a model's tags if called on a class. That is, this model:: class Link(models.Model): ... tags = TagField() Lets you do both of these:: >>> l = Link.objects.get(...) >>> l.tags 'tag1 tag2 tag3' >>> Link.tags 'tag1 tag2 tag3 tag4' """ # Handle access on the model (i.e. Link.tags) if instance is None: return edit_string_for_tags(Tag.objects.usage_for_model(owner)) tags = self._get_instance_tag_cache(instance) if tags is None: if instance.pk is None: self._set_instance_tag_cache(instance, '') else: self._set_instance_tag_cache( instance, edit_string_for_tags(Tag.objects.get_for_object(instance))) return self._get_instance_tag_cache(instance)
def test_recreation_of_tag_list_string_representations(self): plain = Tag.objects.create(name="plain") spaces = Tag.objects.create(name="spa ces") comma = Tag.objects.create(name="com,ma") self.assertEquals(edit_string_for_tags([plain]), u"plain") self.assertEquals(edit_string_for_tags([plain, spaces]), u"plain, spa ces") self.assertEquals(edit_string_for_tags([plain, spaces, comma]), u'plain, spa ces, "com,ma"') self.assertEquals(edit_string_for_tags([plain, comma]), u'plain "com,ma"') self.assertEquals(edit_string_for_tags([comma, spaces]), u'"com,ma", spa ces')