Pregunta

Agregué etiquetas = TagGableManager (en blanco = true) a mis modelos, pero quiero que mis etiquetas no sean insensibles. Vi algunos fragmentos de trabajo para esto y quería preguntar si hay una manera fácil de hacerlo. Si tengo que anular algunos métodos del TagGableManager, avíse cómo puedo hacerlo.

Gracias de antemano, Arshavski Alexander.

¿Fue útil?

Solución

he utilizado Este fragmento 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, anula el QerySet inicial para que todos los QuerySets tengan en cuenta la insensibilidad del caso.

Otros consejos

Estoy seguro de que ya has descubierto la solución :) Aunque pondré la respuesta, ya que alguien podría golpear esto mientras busca -

Usar https://github.com/shacker/django-taggit Versión de Django-Taggit.

Permite configurar TagGit_Force_LowerCase = True

También le permite filtrar las palabras de detención.

Versiones recientes de django-taggit apoyan un TAGGIT_CASE_INSENSITIVE establecer, eso debería comportarse de la forma en que está describiendo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top