Compruebe si existe un objeto

Necesito verificar si Model.objects.filter(...) dio vuelta algo, pero no necesito insertar nada. Mi código hasta ahora es:

 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']) 

Como el filter devuelve un QuerySet , puede usar el conteo para verificar cuántos resultados se devolvieron. Esto es asumiendo que realmente no necesitas los resultados.

 num_results = User.objects.filter(email = cleaned_info['username']).count() 

Sin embargo, después de consultar la documentación, es mejor simplemente llamar a len a su filtro si planea usar los resultados más adelante, ya que solo hará una consulta de SQL:

Una llamada count () realiza un SELECT COUNT (*) entre bambalinas, por lo que siempre debe usar count () en lugar de cargar todo el registro en objetos de Python y llamar a len () en el resultado (a menos que necesite cargar los objetos en la memoria de todos modos, en cuyo caso len () será más rápido).

 num_results = len(user_object) 

Creo que lo más fácil desde un punto de vista lógico y de eficiencia es usar la función de queryset de existir () , documentada aquí:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.exists

Así que en tu ejemplo anterior simplemente escribiría:

 if User.objects.filter(email = cleaned_info['username']).exists(): # at least one object satisfying query exists else: # no object satisfying query exists 

el valor booleano de un QuerySet vacío también es False, por lo que también podría hacer …

 ... if not user_object: do insert or whatever etc. 

También puedes usar get_object_or_404 () , generará un Http404 si no se encontró el objeto:

 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! ... 

Puedes usar:

 try: # get your models except ObjectDoesNotExist: # do something 

si el usuario existe, puede obtener usuario en user_object o user_object será none.

 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