J'ai une table appelée user_info. Je veux obtenir les noms de tous les utilisateurs. La table a donc un champ appelé name. Donc en sql je fais quelque chose comme

SELECT distinct(name) from user_info

Mais je ne suis pas en mesure de comprendre comment faire la même chose dans Django. Habituellement, si j'ai déjà une certaine valeur connue, je peux faire quelque chose comme ci-dessous.

user_info.objects.filter(name='Alex')

Et puis obtenez les informations pour cet utilisateur particulier.

Mais dans ce cas pour la table donnée, je veux obtenir toutes les valeurs de nom en utilisant django ORM comme je le fais dans sql.

Voici mon modèle django

class user_info(models.Model):
    name = models.CharField(max_length=255)
    priority = models.CharField(max_length=1)
    org = models.CharField(max_length=20)

Comment puis-je faire cela dans Django?

1
Souvik Ray 19 mars 2019 à 12:11

2 réponses

Meilleure réponse

Vous pouvez utiliser values_list.

user_info.objects.values_list('name', flat=True).distinct()

Remarque, en Python, les classes sont généralement définies dans InitialCaps: votre modèle doit être UserInfo.

5
Daniel Roseman 19 mars 2019 à 09:13

Vous pouvez utiliser values_list() comme indiqué dans la réponse de Daniel, qui vous fournira vos données dans une liste contenant les valeurs du champ. Ou vous pouvez également utiliser, values() comme ceci:

user_info.object.values('name')

Qui vous renverra un ensemble de requêtes contenant un dictionnaire. values_list() et values() sont utilisés pour sélectionner les colonnes d'un tableau.

1
Rabin Lama Dong 19 mars 2019 à 09:38