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.
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]>
Retourne un QuerySet qui retourne dictionaries
, plutôt que des occurrences de modèle, lorsqu'il est utilisé comme itérable.
Retourne un QuerySet qui retourne list of tuples
, plutôt que des occurrences de modèle, lorsqu'il est utilisé comme itérable.
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}]
Vous pouvez obtenir les différentes valeurs avec:
set(Article.objects.values_list('comment_id', flat=True))