Dans Django, quelle est la différence entre les deux suivants:
Article.objects.values_list('comment_id', flat=True).distinct()
contre
Article.objects.values('comment_id').distinct()
Mon objectif est d'obtenir une liste d'identifiants de commentaires uniques sous chacun Article
. J'ai lu la documentation (et en fait j'ai utilisé les deux approches). Les résultats semblent manifestement similaires.
django
django-models
django-queryset
django-orm
Hassan Baig
la source
la source
if self.id in Article.objects.values_list('comment_id', flat=True):
tout en utilisant des valeurs dont vous avez besoin pour accéder au dictionnaireArticle.objects.filter(comment_id=self.id).exists()
?Réponses:
La
values()
méthode renvoie un QuerySet contenant des dictionnaires:La
values_list()
méthode retourne un QuerySet contenant des tuples:Si vous utilisez
values_list()
avec un seul champ, vous pouvez utiliserflat=True
pour renvoyer un QuerySet de valeurs uniques au lieu de 1-tuples:la source
distinct()
on l'utilise hein?distinct()
fonctionne différemment. L'important est la structure de données avec laquelle vous souhaitez travailler.values()
retourne aQuerySet
et non alist
. Bien que l'objet renvoyé parvalues()
ressemble à unlist
, il ne se comporte pas comme un dans certains cas. Par exemple, il ne sera pas sérialisable json à moins que nous ne le convertissions en une `liste 'values_list
en une vraie liste Python en utilisant simplement lalist
fonction:list(Article.objects.values_list('comment_id', flat=True).distinct())
valeurs()
Renvoie un QuerySet qui renvoie
dictionaries
, plutôt que des instances de modèle, lorsqu'il est utilisé en tant qu'itérable.liste_valeurs ()
Renvoie un QuerySet qui renvoie
list of tuples
, plutôt que des instances de modèle, lorsqu'il est utilisé en tant qu'itérable.distinct()
distincts sont habitués aux
eliminate the duplicate
éléments.Exemple:
la source
values
distinct()
élimine les éléments en double des résultats de la requête, pas de la base de données.Vous pouvez obtenir les différentes valeurs avec:
la source