web-dev-qa-db-fra.com

Django values_list vs valeurs

Dans Django, quelle est la différence entre les deux suivants:

Article.objects.values_list('comment_id', flat=True).distinct()

contre

Article.objects.values('comment_id').distinct()

Mon objectif est d’obtenir une liste d’ID de commentaires uniques sous chaque Article. J'ai lu la documentation (et en fait, j'ai utilisé les deux approches). Les résultats semblent manifestement similaires.

98
Hassan Baig

La méthode values() renvoie un QuerySet contenant les dictionnaires:

<QuerySet [{'comment_id': 1}, {'comment_id': 2}]>

La méthode values_list() renvoie un QuerySet contenant des n-uplets:

<QuerySet [(1,), (2,)]>

Si vous utilisez values_list() avec un seul champ, vous pouvez utiliser flat=True pour renvoyer un QuerySet de valeurs uniques au lieu de 1-tuples:

<QuerySet [1, 2]>
168
Alasdair

valeurs()

Retourne un QuerySet qui retourne dictionaries, plutôt que des occurrences de modèle, lorsqu'il est utilisé comme itérable.

liste_valeurs ()

Retourne un QuerySet qui retourne list of tuples, plutôt que des occurrences de modèle, lorsqu'il est utilisé comme itérable.

distinct()

distincts sont utilisés pour eliminate the duplicate éléments.

Exemple:

Article.objects.values_list('id', flat=True) # flat=True will remove the tuples and return the list   
[1, 2, 3, 4, 5, 6]

Article.objects.values('id')
[{'id':1}, {'id':2}, {'id':3}, {'id':4}, {'id':5}, {'id':6}]
36
Ibrahim Kasim

Vous pouvez obtenir les différentes valeurs avec:

set(Article.objects.values_list('comment_id', flat=True))
1
pitu