Question

J'ai ajouté des tags = TaggableManager (blanc = true) à mes modèles, mais je veux que mes étiquettes pour être insensible à la casse. J'ai vu quelques extraits de contournements de travail pour ce et je voulais demander s'il y a un moyen facile de le faire? Si je dois passer outre certaines méthodes de la TaggableManager, s'il vous plaît conseiller comment puis-je faire?

Merci à l'avance, Arshavski Alexander.

Était-ce utile?

La solution

J'ai utilisé cet extrait pour un problème similaire. Une copie du code (réédité pour la postérité):

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>

En fait, vous substituez la queryset initiale afin que tous QuerySets prennent en compte le cas manque de sensibilité.

Autres conseils

Je suis sûr que vous avez compris la solution maintenant :) Bien que je mettrai la réponse que quelqu'un pourrait frapper ce lors de la recherche -

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

Il permet de configurer TAGGIT_FORCE_LOWERCASE = True

Il vous permet également de mots d'arrêt du filtre.

Les versions récentes de soutien django-Taggit un cadre TAGGIT_CASE_INSENSITIVE, qui devrait se comporter de la façon dont vous décrivez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top