2010-09-09 5 views
7

J'ai une base de données qui a des enregistrements avec plusieurs champs contenant des informations.Django requête à la liste

Pour obtenir toutes les données du tableau correspondant à un certain filtre je ferais ceci:

records = Record.objects.filter(fieldA='a') 

dossiers, je suppose, est un objet QuerySet et contient une « liste » des dossiers. Est-ce exact?

Maintenant, disons que je veux une liste des valeurs dans un champ.

Si je fais ceci:

records = Record.objects.filter(fieldA='a').only('fieldB') 

-je encore un queryset, mais maintenant il a quelques champs différés. Ce que je veux, c'est juste une liste des valeurs que je voulais saisir alias fieldB. Je veux aussi pouvoir saisir les valeurs distinctes de fieldB. Je suppose que je pourrais juste itérer sur chaque enregistrement, retirer le champ B, l'ajouter à une liste si ce n'est pas déjà là, et voilà, mais il doit y avoir un meilleur moyen.

Merci!

EDIT: Je pense que ce que je suis à la recherche est

Record.objects.values_list('fieldB') 
+0

http://stackoverflow.com/questions/4424435/how-to-convert-a-django-queryset-to-a-list – Wtower

Répondre

10

Eh oui, trouvé. http://docs.djangoproject.com/en/dev/ref/models/querysets/ Voici la référence

+5

qui produit une liste de 1 valeur tuples '(('a ',), (' b ',), (' c ',)) ', ce qui n'est probablement pas ce que vous voulez. Si vous passez flat = True à values_list ('Record.objects.values_list ('fieldB', flat = True)') vous obtiendrez une liste plate '('a', 'b', 'c')'. –

4

Je poste le commentaire par James ici pour le rendre plus important. C'était certainement ce que je cherchais.

Je voulais une liste de valeurs. L'utilisation de la méthode QuerySet.list_values() a renvoyé une liste de tuples. Pour obtenir une liste de valeurs, j'avais besoin de l'option flat=True.

Record.objects.values_list('fieldB', flat=True)