2011-03-14 19 views
7

He añadido tags = TaggableManager (blank = True) a mis modelos, pero quiero que mis etiquetas no distingan entre mayúsculas y minúsculas. Vi algunos fragmentos de solución de problemas para esto y quería preguntar si hay una manera fácil de hacerlo. Si tengo que anular algunos métodos del TaggableManager, indique cómo puedo hacerlo.make tags insensibles a las mayúsculas y minúsculas con django-taggit

Gracias de antemano, Arshavski Alexander.

Respuesta

-2

He usado this snippet para un problema similar. Una copia del código (reimpreso para la posteridad):

from django.db.models import Manager 
from django.db.models.query import QuerySet 

class CaseInsensitiveQuerySet(QuerySet): 
    def _filter_or_exclude(self, mapper, *args, **kwargs): 
     # 'name' is a field in your Model whose lookups you want case-insensitive by default 
     if 'name' in kwargs: 
      kwargs['name__iexact'] = kwargs['name'] 
      del kwargs['name'] 
     return super(CaseInsensitiveQuerySet, self)._filter_or_exclude(mapper, *args, **kwargs) 

# custom manager that overrides the initial query set 
class TagManager(Manager): 
    def get_query_set(self): 
     return CaseInsensitiveQuerySet(self.model) 

# and the model itself 
class Tag(models.Model): 
    name = models.CharField(maxlength=50, unique=True, db_index=True) 

    objects = TagManager() 

    def __str__(self): 
     return self.name 
# now... 
>>> tag = Tag(name='test') 
>>> tag.save() 
>>> Tag.objects.get(name='TEST') 
<Tag: test> 

Básicamente, se anula la queryset inicial, de manera que todos los QuerySets toman en cuenta mayúsculas y minúsculas.

+0

No publique la misma respuesta exactamente varias veces. Si la pregunta es un duplicado, márquelo como tal. – Mat

+0

Esto realmente no responde la pregunta. La pregunta involucra a django-taggit. Su sugerencia es básicamente "escribir su propia aplicación de etiquetado". –

3

estoy seguro de que haya descubierto la solución por ahora :) Aunque voy a poner la respuesta como alguien podría ir a este, mientras que la búsqueda -

versión

Uso https://github.com/shacker/django-taggit de django-Taggit.

Permite configurar TAGGIT_FORCE_LOWERCASE = True

También le permite filtrar las palabras vacías.

1

Las versiones recientes de django-Taggit soportan un entorno TAGGIT_CASE_INSENSITIVE, que deben comportarse de la manera que usted describe.

Cuestiones relacionadas