values_list select_related queryset query example django django-models django-queryset django-orm

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))