Q:

Django optimización de Querys

Estoy haciendo una consulta en mis vistas de Django con diferentes palabras y me gustaría optimizarlo haciendo uso de una lista. 
Tengo este modelo
class Personas(models.Model):
    id = models.AutoField(db_column='id', primary_key=True)  # Field name made lowercase.
    nombre = models.CharField(db_column='nombre', unique=True, max_length=100)  # Field name made lowercase.

class Meta:
    managed = False
    db_table = 'personas'

Hasta ahora estoy haciendo
#siendo 'nombres' mi lista de argumentos a buscar
primerNombre = nombres.pop(0) #obtengo el primer argumento a buscar
answer = Personas.objects.filter(nombre__icontains = primerNombre)
for nombre in nombres:
    answer = answer | Personas.objects.filter(nombre__icontains = nombre) #Hago una union por cada consulta

Me vi obligado a hacer esto porque intenté
answer = answer | Personas.objects.filter(nombre__in = nombres)

Y no me funcionó, al parecer el "__in" solo funciona con números. Hay alguna forma mas elegante u optima de hacerlo? Desde ya muchísimas gracias!

A:

No es que __in sólo se pueda usar con números, el asunto es que la lista de nombres que estás usando no es igual al nombre que tienes registrado en la BD, lo que no se puede hacer es combinar __icontains con __in, pero si te aseguras de que los nombres en la lista nombres esten escritos igual que en la BD, tal vez pre procesandolo con .title(), .lower() o .upper(); vas a poder usar __in en tu consulta:
Personas.objects.filter(nombre__in = nombres)

