No Django, qual é a diferença entre os dois seguintes:
Article.objects.values_list('comment_id', flat=True).distinct()
vs
Article.objects.values('comment_id').distinct()
Meu objetivo é obter uma lista de IDs de comentários exclusivos em cada um Article
. Eu li a documentação (e, de fato, usei as duas abordagens). Os resultados abertamente parecem semelhantes.
django
django-models
django-queryset
django-orm
Hassan Baig
fonte
fonte
if self.id in Article.objects.values_list('comment_id', flat=True):
enquanto estiver usando os valores que você precisa para acessar o dicionárioArticle.objects.filter(comment_id=self.id).exists()
?Respostas:
O
values()
método retorna um QuerySet contendo dicionários:O
values_list()
método retorna um QuerySet contendo tuplas:Se você estiver usando
values_list()
um único campo, poderáflat=True
retornar um QuerySet de valores únicos em vez de 1-tupla:fonte
distinct()
é usado, hein?distinct()
funciona de maneira diferente. O importante é com qual estrutura de dados você deseja trabalhar.values()
retorna umQuerySet
e não umlist
. Embora o objeto retornado por sevalues()
pareça com umlist
, ele não se comporta como um em alguns casos. Por exemplo, ele não pode ser serializado pelo json, a menos que o convertamos em uma `lista 'values_list
a uma verdadeira lista Python, usando apenas alist
função:list(Article.objects.values_list('comment_id', flat=True).distinct())
valores ()
Retorna um QuerySet que retorna
dictionaries
, em vez de instâncias de modelo, quando usado como iterável.values_list ()
Retorna um QuerySet que retorna
list of tuples
, em vez de instâncias de modelo, quando usado como iterável.distinto ()
distintos são usados para
eliminate the duplicate
elementos.Exemplo:
fonte
values
distinct()
elimina os elementos duplicados dos resultados da consulta, não do banco de dados.Você pode obter os diferentes valores com:
fonte