`employee[0] or None`? # This won't work, but this is what I mean.
4 Réponses :
Cela devrait fonctionner:
employee[0] if employee else None
Je pense que c'est la même chose que l'employé [0] ou aucune, provoquera une index hors de portée.
Non, ce n'est pas le cas. Il s'agit de la valeur de l'employé de l'employé [0] uniquement si l'employé est une valeur réelle. Quyeyset vide est une valeur de type faux, donc si vous avez un queryset vide, vous n'obtiendrez aucun.
first_employee = employee[0] if employee.count() > 0 else None
C'est mauvais. Je ne sais pas si cela fonctionne du tout, mais même si vous obtenez deux requêtes SQL à la base de données: une pour le compte et un pour l'employé même. Django QuerySet est paresseux, il est donc calculé que lorsque vous essayez d'extraire des données pour la première fois. Dans ce cas, vous essayez de le faire pendant la rédaction de l'employé.count (). Django passe "Secele Count () de ..." Requête à votre base de données et vous donne un numéro de retour. Mais lorsque vous essayez de faire de l'employé [0], Django doit interroger une nouvelle base de données! (Ou échouer du tout, je ne suis pas sûr). Quoi qu'il en soit, il s'agit d'une très mauvaise façon de mettre en œuvre une fonctionnalité aussi simple.
Si vous voulez simplement obtenir une seule instance, utilisez Obtenez code> , pas Filtre CODE>: def get_object_or_None(klass, *args, **kwargs):
"""
Uses get() to return an object or None if the object does not exist.
klass may be a Model, Manager, or QuerySet object. All other passed
arguments and keyword arguments are used in the get() query.
Note: Like with get(), a MultipleObjectsReturned will be raised if
more than one object is found.
"""
queryset = _get_queryset(klass)
try:
return queryset.get(*args, **kwargs)
except queryset.model.DoesNotExist:
return None
sur django> = 1.6 Il y a la méthode note, cependant, cela n'a de sens que si vous connaissez la QuerySet est garanti de retourner 1 ou 0 résultats. P> p> première code>, afin que vous puissiez juste faire:
BTW, essayez d'éviter d'essayer de prendre un bloc.
stackoverflow.com/questions/4722375/... devrait modifier vos anciennes questions au lieu de demander de nouveaux
@ user469652 suggérez-vous de ne pas utiliser d'essayer, sauf blocage? Si oui, pourquoi?