Lista de valores de Django frente a valores
En Django, ¿cuál es la diferencia entre los dos siguientes?
Article.objects.values_list('comment_id', flat=True).distinct()
versus:
Article.objects.values('comment_id').distinct()
Mi objetivo es obtener una lista de identificadores de comentarios únicos debajo de cada uno Article
. He leído la documentación (y de hecho he utilizado ambos enfoques). Los resultados parecen abiertamente similares.
El values()
método devuelve un QuerySet que contiene diccionarios:
<QuerySet [{'comment_id': 1}, {'comment_id': 2}]>
El values_list()
método devuelve un QuerySet que contiene tuplas:
<QuerySet [(1,), (2,)]>
Si está utilizando values_list()
un solo campo, puede utilizarlo flat=True
para devolver un QuerySet de valores únicos en lugar de 1 tupla:
<QuerySet [1, 2]>
valores()
Devuelve un QuerySet que devuelve dictionaries
, en lugar de instancias de modelo, cuando se utiliza como iterable.
lista_valores()
Devuelve un QuerySet que devuelve list of tuples
, en lugar de instancias de modelo, cuando se utiliza como iterable.
distinto()
distintos están acostumbrados a eliminate the duplicate
los elementos.
Ejemplo:
>>> list(Article.objects.values_list('id', flat=True)) # flat=True will remove the tuples and return the list
[1, 2, 3, 4, 5, 6]
>>> list(Article.objects.values('id'))
[{'id':1}, {'id':2}, {'id':3}, {'id':4}, {'id':5}, {'id':6}]