2017-09-18 3 views
0

Comment puis-je interroger le modèle par contrainte sur certains champs, tels que je ne veux pas interroger l'ID, et le mot de passe.Comment puis-je extraire uniquement les champs spécifiés lorsque j'interroge les modèles?

Class AppUser(models.Model): 
    username = models.CharField(max_length=16) 
    password = models.CharField(max_length=64) 
    email = models.CharField(max_length=16) 

Quand je questionne maintenant la situation est:

app_users = models.AppUser.objects.all() # all the fields will be find out. 

Alors, comment puis-je vérifier les champs que spécifiés quand je fais une recherche, je ne veux pas montre l'identifiant et le mot de passe?

Répondre

1

Vous pouvez utiliser defer() ou only().

Par exemple: app_users = models.AppUser.objects.defer('id', 'password')

construirait une requête SQL qui serait SELECT * FROM ...., mais sans charger id et password. Le defer() est utilisé pour éviter de charger certains champs.

app_users = models.AppUser.objects.only('id')

cela maintenant que la charge id s de la base de données, ce qui signifie only() est utilisé pour récupérer des champs spécifiques de la base de données. Ce sont les attributs QuerySet qui sont utilisés pour l'optimisation des performances dans Django. Plus d'informations sur documentation.

2

vous pouvez utiliser values ou values_list

app_users = models.AppUser.objects.all().values('email') 

ou vous pouvez utiliser la liste des champs

values = ['username', 'email'] 
app_users = models.AppUser.objects.all().values(*values) 

plus de détails values