Make tags easier with properties

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from django.db import models
from tagging.models import Tag

class MyModel(models.Model):
    name = models.CharField(maxlength=250)
    tag_list = models.CharField(maxlength=250)
    
    def save(self):
        super(MyModel, self).save()
        self.tags = self.tag_list
    
    def _get_tags(self):
        return Tag.objects.get_for_object(self)
    
    def _set_tags(self, tag_list):
        Tag.objects.update_tags(self, tag_list)
    
    tags = property(_get_tags, _set_tags)

More like this

  1. Repeat blocks with new context / simple Jinja-like macro system by miracle2k 6 years, 9 months ago
  2. ModelMixin by eallik 3 years, 5 months ago
  3. Text Highlighting Filter by girasquid 5 years, 4 months ago
  4. Template tag to sort a list of links by pytechd 6 years, 8 months ago
  5. Get derived model instance by werehuman 7 months, 1 week ago

Comments

jacobian (on March 6, 2007):

Clever clever :)

There's likely an easy way to encapsulate this into a descriptor so you could just do:

tags = TagField()

and have everything work like you said. I should experiment with that...

#

zeeg (on March 6, 2007):

We actually do something similar to this as well, it's quite handy. The only difference is for our get tags and set tags methods we validate the data to make sure we can't simply skip a query.

#

ubernostrum (on August 25, 2007):

It's worth noting that Jonathan has now added a TagField to django-tagging, which uses a descriptor to get/set the tags. That offers a similar interface to this, but wraps it up with admin-interface goodness :)

#

ymxiao (on September 24, 2011):

good job i'm newbie in python, thinks for introduce property to me.

#

(Forgotten your password?)