Пример #1
0
def get_tags(tags, create=False, str_pk=False):
    if isinstance(tags, (str, unicode)):
        tags = parse_tags(tags)    
    tag_set = set()
    names = set()    
    tag_lookups = set()
    for tag in tags:
        if isinstance(tag, Tag):
            tag_set.add(tag)
            if create and not tag.pk:
                tag.save()
        elif isinstance(tag, basestring):
            try:
                tag_lookups.add(models.Q(pk=int(tag)))
            except ValueError:
                if create:
                    names.add(tag)
                tag_lookups.add(models.Q(name=tag))
        elif isinstance(tag, (int, long)):
            tag_lookups.add(models.Q(pk=tag))
    if tag_lookups:
        for tag in Tag.objects.filter(reduce_or(tag_lookups)):
            tag_set.add(tag)
        for name in names.difference(tag.name for tag in tag_set):
            tag_set.add(Tag.objects.create(name=name))            
    return tag_set
Пример #2
0
 def assign(self, tags):
     if isinstance(tags, (str, unicode)):
         tags = parse_tags(tags)
     self.clear()
     self.add(*tags)