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 debajo de cada uno Article. He leído la documentación (y de hecho he usado ambos enfoques). Los resultados abiertamente parecen similares.
django
django-models
django-queryset
django-orm
Hassan Baig
fuente
fuente

if self.id in Article.objects.values_list('comment_id', flat=True):mientras usa valores que necesita para acceder al diccionarioArticle.objects.filter(comment_id=self.id).exists()?Respuestas:
El
values()método devuelve un QuerySet que contiene diccionarios:El
values_list()método devuelve un QuerySet que contiene tuplas:Si está usando
values_list()un solo campo, puede usarflat=Truepara devolver un QuerySet de valores únicos en lugar de 1-tuplas:fuente
distinct()se usa, ¿eh?distinct()funcione de manera diferente. Lo importante es con qué estructura de datos desea trabajar.values()devuelve aQuerySety no alist. Aunque el objeto devuelto porvalues()parece un alist, en algunos casos no se comporta como tal. Por ejemplo, no será json serializable a menos que lo convirtamos en una 'lista'values_lista una verdadera lista de Python simplemente usando lalistfunción:list(Article.objects.values_list('comment_id', flat=True).distinct())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
list of tuples, en lugar de instancias de modelo, cuando se usa como iterable.distinto()
distintos se utilizan para
eliminate the duplicateelementos.Ejemplo:
fuente
valuesdistinct()elimina los elementos duplicados de los resultados de la consulta, no de la base de datos.Puede obtener los diferentes valores con:
fuente