select_related - Django values_list vs valores
select_related django example (3)
En Django, ¿cuál es la diferencia entre los dos siguientes:
Article.objects.values_list(''comment_id'', flat=True).distinct()
vs
Article.objects.values(''comment_id'').distinct()
Mi objetivo es obtener una lista de identificadores de comentarios únicos en cada
Article
.
He leído la documentación (y de hecho he usado ambos enfoques).
Los resultados abiertamente parecen similares.
valores()
Devuelve un QuerySet que devuelve
dictionaries
, en lugar de instancias de modelo, cuando se usa como iterable.
valores_lista ()
Devuelve un QuerySet que devuelve una
list of tuples
, en lugar de instancias de modelo, cuando se usa como iterable.
distinto()
Distintos se utilizan para
eliminate the duplicate
elementos
eliminate the duplicate
.
Ejemplo:
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}]
El método
values()
devuelve un QuerySet que contiene diccionarios:
<QuerySet [{''comment_id'': 1}, {''comment_id'': 2}]>
El método
values_list()
devuelve un QuerySet que contiene tuplas:
<QuerySet [(1,), (2,)]>
Si está utilizando
values_list()
con un solo campo, puede usar
flat=True
para devolver un QuerySet de valores individuales en lugar de 1-tuplas:
<QuerySet [1, 2]>
Puede obtener los diferentes valores con:
set(Article.objects.values_list(''comment_id'', flat=True))