J'ai besoin de vérifier si Model.objects.filter(...)
a mis quoi que ce soit en place, mais je n'ai pas besoin d'insérer quoi que ce soit. Mon code jusqu'ici est:
user_pass = log_in(request.POST) # form class
if user_pass.is_valid():
cleaned_info = user_pass.cleaned_data
user_object = User.objects.filter(email = cleaned_info['username'])
Puisque filter
retourne une QuerySet
, vous pouvez utiliser count pour vérifier le nombre de résultats renvoyés. En supposant que vous n’ayez pas besoin des résultats.
num_results = User.objects.filter(email = cleaned_info['username']).count()
Après avoir consulté la documentation, il est préférable d'appeler simplement len sur votre filtre si vous prévoyez d'utiliser les résultats ultérieurement, car vous ne ferez qu'une requête SQL:
Un appel count () effectue un SELECT COUNT (*) en coulisse. Vous devez donc toujours utiliser count () plutôt que de charger tout l'enregistrement dans des objets Python et d'appeler len () sur le résultat (sauf si vous devez charger les objets. de toute façon dans la mémoire, auquel cas len () sera plus rapide).
num_results = len(user_object)
Je pense que le plus simple d'un point de vue logique et efficace est d'utiliser la fonction n'existe () de queryset, documentée ici:
https://docs.djangoproject.com/en/dev/ref/models/querysets/#Django.db.models.query.QuerySet.exists
Donc, dans votre exemple ci-dessus, j'écrirais simplement:
if User.objects.filter(email = cleaned_info['username']).exists():
# at least one object satisfying query exists
else:
# no object satisfying query exists
la valeur booléenne d'un QuerySet vide est également False, vous pouvez donc simplement le faire ...
...
if not user_object:
do insert or whatever etc.
Vous pouvez également utiliser get_object_or_404 () , il générera un Http404
si l'objet n'a pas été trouvé:
user_pass = log_in(request.POST) #form class
if user_pass.is_valid():
cleaned_info = user_pass.cleaned_data
user_object = get_object_or_404(User, email=cleaned_info['username'])
# User object found, you are good to go!
...
Vous pouvez utiliser:
try:
# get your models
except ObjectDoesNotExist:
# do something
si l'utilisateur existe, vous pouvez obtenir l'utilisateur dans l'objet_utilisateur, sinon l'objet_utilisateur sera nul.
try:
user_object = User.objects.get(email = cleaned_info['username'])
except User.DoesNotExist:
user_object = None
if user_object:
# user exist
pass
else:
# user does not exist
pass