Как отфильтровать набор запросов django, используя нечувствительный к регистру __in?
У меня есть модель:
class Skill(models.Model):
name = models.CharField(max_length=120)
icon = models.CharField(max_length=20)
color = models.CharField(max_length=7)
Я хочу сделать следующий фильтр, но без учета регистра:
skill_names = ['Code Quality', 'Analytical Thinking', 'Productivity', 'Communication']
Skill.objects.filter(name__in=skill_names)
Надеюсь, это поможет вам.
from django.db.models import Q
skill_names = ['Code Quality', 'Analytical Thinking', 'Productivity', 'Communication']
query = Q()
for skill in skill_names:
query |= Q(name__contains=skill)
Skill.objects.filter(query)
Я бы, вероятно, сделал что-то вроде этого (не проверено):
Skill.objects.filter(name__in=[sn.lower() for sn in skill_names])
У меня была похожая проблема, и это помогло мне
from operator import or_
from functools import reduce
from django.db.models import Q
skill_names = ['Code Quality', 'Analytical Thinking', 'Productivity', 'Communication']
skill_filter = reduce(
or_, (Q(name__icontains=skill) for skill in skill_names)
)
Skill.objects.filter(name__in=skill_filter)