Je suis sûr que c'est une opération banale, mais je ne peux pas comprendre comment cela se fait.
Il doit y avoir quelque chose de plus intelligent que cela:
ids = [1, 3, 6, 7, 9]
for id in ids:
MyModel.objects.filter(pk=id)
Je cherche à les obtenir tous dans une seule requête avec quelque chose comme:
MyModel.objects.filter(pk=[1, 3, 6, 7, 9])
Comment filtrer une requête Django avec une liste de valeurs?
python
django
django-queryset
ajwood
la source
la source
Réponses:
De la documentation Django :
la source
get()
, vous obtiendrez bien sûr une erreur ObjectDoesNotExist.Lorsque vous avez une liste d'éléments et que vous souhaitez vérifier les valeurs possibles de la liste, vous ne pouvez pas utiliser
=
.La requête SQL sera comme
SELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9]
ce qui n'est pas vrai. Vous devez utiliser l'in
opérateur pour cela, donc votre requête sera commeSELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9)
pour cet__in
opérateur de fourniture de Django .la source
De la documentation Django :
la source