django dynamiquement de filtrage avec des objets q
Je suis en train d'interroger une base de données basée sur la saisie de l'utilisateur balises. Le nombre de tags peut être de 0 à 5 ans, donc j'ai besoin de créer la requête dynamiquement.
J'ai donc une liste de balises, tag_list, et je veux interroger la base de données:
design_list = Design.objects.filter(Q(tags__tag__contains = "tag1") and Q(tags__tag__contains = "tag2") and etc. etc. )
Comment puis-je créer cette fonction?
Vous devez vous connecter pour publier un commentaire.
Vous aurez envie de faire une boucle par la tag_list et d'appliquer un filtre pour chacun.
Cela vous donnera des résultats correspondant tous balises, comme votre exemple indiqué avec
and
. En fait, si vous avez besoinor
au lieu de cela, vous aurez probablement besoin de Q objets.Edit: je pense que j'ai ce que vous cherchez pour l'instant.
J'ai testé et il semble fonctionner vraiment bien.
Edit 2: de Crédit à kezabelle dans #django sur Freenode pour l'idée de départ.
Design.objects.filter(tags__tag__contains='tag1').filter(tags__tag__contains='tag2')
, etc. Ce que vous voulez probablement à la place estDesign.objects.filter(Q(tags__tag__contains='tag1') | Q(tags__tag__contains='tag2'))
, mais une façon de vous donne un nombre variable de Q objets.Vous pouvez utiliser de cette façon:
Par cette façon, vous pouvez utiliser généré dynamiquement les noms de champ.
Vous pouvez également utiliser
Q.AND
pourAND
condition.__in
? Comme un Q qui correspond à un champ d'une liste de valeurs, d'où le nom du champ et de la liste de valeurs sont données par des variables au lieu de littéraux?Juste à préparer une liste de points d'abord, puis, requête comme ceci: