template objetos instalar examples estilos con bootstrap django django-models django-q

objetos - template web django



django filtrando dinĂ¡micamente con q objetos (3)

Puedes usar de esta manera:

my_dict = {''field_1'': 1, ''field_2'': 2, ''field_3'': 3, ...} # Your dict with fields or_condition = Q() for key, value in my_dict.items(): or_condition.add(Q(**{key: value}), Q.OR) query_set = MyModel.objects.filter(or_condition)

De esta forma puede usar nombres de campos generados dinámicamente. También puede usar Q.AND para la condición AND .

Intento consultar una base de datos basada en las etiquetas de entrada del usuario. El número de etiquetas puede ser de 0 a 5, así que necesito crear la consulta dinámicamente.

Así que tengo una lista de etiquetas, tag_list, y quiero consultar la base de datos:

design_list = Design.objects.filter(Q(tags__tag__contains = "tag1") and Q(tags__tag__contains = "tag2") and etc. etc. )

¿Cómo puedo crear esta característica?


Querrá recorrer el tag_list y aplicar un filtro para cada uno.

tag_list = [''tag1'', ''tag2'', ''tag3''] base_qs = Design.objects.all() for t in tag_list: base_qs = base_qs.filter(tags__tag__contains=t)

Esto le dará resultados que coincidan con todas las etiquetas, como su ejemplo se indica con and . Si de hecho lo necesitaras or lugar, probablemente necesitarás objetos Q.

Editar: creo que tengo lo que estás buscando ahora.

tags = [''tag1'', ''tag2'', ''tag3''] q_objects = Q() # Create an empty Q object to start with for t in tags: q_objects |= Q(tags__tag__contains=t) # ''or'' the Q objects together designs = Design.objects.filter(q_objects)

Probé esto y parece funcionar realmente bien.

Editar 2: crédito a kezabelle en #django en Freenode para la idea inicial.


Simplemente prepare una lista de etiquetas primero, haga una consulta como esta:

tags = [''tag1'', ''tag2'',...] design_list = Design.objects.filter(tags__tag__contains__in = tags)