Нижний регистр Значения полей django models queryset

У меня есть модель объекта и несколько тегов, назначенных объекту этой модели. Теги могут быть прописными, строчными или сочетать оба варианта. Я хочу написать набор запросов, который будет возвращать те объекты, которые имеют те же теги, которые я указал. Примечание: Я использую модуль django-taggit.
. Views.py

def home(request):
    book = Book.objects.filter(tags__name__in= map(lambda s:s.lower(), ['harry-potter', 'Champak', 'Physics']))
    print(book)
    return HttpResponse("Books Retrieved")

Models.py

from django.db import models
from django.utils.translation import ugettext_lazy as _

from taggit.managers import TaggableManager
from taggit.models import GenericUUIDTaggedItemBase, TaggedItemBase

class UUIDTaggedItem(GenericUUIDTaggedItemBase, TaggedItemBase):
    class Meta:
        verbose_name = _("Tag")
        verbose_name_plural = _("Tags")

class Book(models.Model):
    name = models.CharField(max_length=100)
    details = models.TextField(blank=True)
    tags = TaggableManager(through=UUIDTaggedItem, blank = True)

Теперь я хочу вернуть все книги, в которых теги упоминаются как 'HArry-Potter', 'HARRY-POTTER', или любое другое слово.

PS: Если каким-либо образом мы сможем уменьшить список 'tags__name__in', наша работа будет закончена.

Вы можете сделать объект Q, в котором вы фильтруете регистр вчувствительный с:

from django.db.models import Q

data = ['harry-potter', 'Champak', 'Physics']

qfilter = Q(
    *[Q(tags__name__iexact=item) for item in data],
    _connector=Q.OR
)

Book.objects.filter(
    qfilter
)

В __iexact [Django-doc] будет нечувствительно совпадать по регистру с каждым item в data.

После гугления и изучения документации я пришел к этому ответу, который делает мою работу

tag_re = '(' + 'pipe|seperated|list|of|tags' + ')'
Book.filter(tags__name__iregex=rf'{tag_re}').distinct()
Вернуться на верх