Сделайте нечувствительные теги с django-taggit

StackOverflow https://stackoverflow.com/questions/5300202

  •  22-10-2019
  •  | 
  •  

Вопрос

Я добавил теги = Taggablemanager (blank = true) в свои модели, но я хочу, чтобы мои теги были нечувствительны к случаям. Я увидел несколько фрагментов работ вокруг этого и хотел спросить, есть ли это простой способ сделать это? Если мне придется переопределить некоторые методы из Taggablemanager, пожалуйста, сообщите, как я могу это сделать?

Заранее спасибо, Аршавский Александр.

Это было полезно?

Решение

я использовал этот фрагмент для аналогичной проблемы. Копия кода (перепечатана для потомков):

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>

По сути, вы переопределяете начальный запрос, так что все запросы учитывают нечувствительность случая.

Другие советы

Я уверен, что вы уже выяснили решение :) Хотя я помесчу ответ, так как кто -то может нанести это во время поиска -

Использовать https://github.com/shacker/django-taggit Версия Django-Taggit.

Это позволяет настроить taggit_force_lowercase = true

Это также позволяет отфильтровать слова.

Последние версии Django-Taggit поддерживают TAGGIT_CASE_INSENSITIVE Настройка, это должно вести себя так, как вы описываете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top