Domanda

Ho aggiunto i tag = TaggableManager (vuote = TRUE) per i miei modelli, ma voglio che i miei tag da maiuscole e minuscole. Ho visto alcuni frammenti di soluzioni per questo e volevo chiedere se c'è un modo semplice per farlo? Se devo sostituire alcuni metodi della TaggableManager, si prega di avvisare come posso farlo?

Grazie in anticipo, Arshavski Alexander.

È stato utile?

Soluzione

questo frammento per un problema simile. Una copia del codice (ristampato per i posteri):

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>

In sostanza, si ignora il set di query iniziale, in modo che tutti i set di query prendono caso insensibilità in considerazione.

Altri suggerimenti

Sono sicuro che ho capito soluzione ormai :) Anche se mi metterò la risposta come qualcuno potrebbe colpire questo durante la ricerca -

https://github.com/shacker/django-taggit versione di django- taggit.

Permette di configurare TAGGIT_FORCE_LOWERCASE = True

Si consente inoltre di parole stop filtro.

Le versioni recenti di sostegno un'impostazione TAGGIT_CASE_INSENSITIVE django-taggit, che dovrebbe comportarsi nel modo che stai descrivendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top