.get() retourne toujours cet objet s'il existe (et s'il y en a exactement un). Il soulève également une exception si elle n'existe pas. Par exemple
blah = MyModel.objects.get(pk=1)
blah est une instance de MyModel. En revanche, .filter() ne renvoie pas d'erreur si elle n'existe pas.
blah = MyModel.objects.filter(pk=1234234234)
Puis bla est une requête vide. Vous pouvez vérifier cela en appelant .count() sur blah. si blah.count() == 0 signifie qu'il n'y a aucun élément MyModel avec la clé 1234234234. De même, s'il y a beaucoup d'articles avec cette requête dire:
blah = MyModel.objects.filter(name__contains="Brian")
Le vous obtenez un résultat de la requête qui peut être interated plus pour obtenir chaque résultat:
for b in blah:
print b.name
En outre, une autre méthode intéressante simular .get() est .get_or_create() http://www.djangoproject.com/documentation/models/get_or_create/ Avec cela, vous pouvez dire:
blah,created = MyModel.objects.get_or_create(name="Brian Ray",
cool=False,
fun=True)
Si déjà est un BrianRay qui serait normalement retourné avec le .get() il retourne juste cette instance; sinon, il le crée. Notez qu'il renvoie deux choses. La seconde est juste un drapeau pour permettre à l'appelant de savoir ce qui s'est réellement passé.
HTH, Brian Ray
Notez également que 'get' renvoie une exception' DoesNotExist' lorsque l'objet est introuvable et renvoie une exception 'MultipleObjectsFound' quand il y a plus d'un. D'autre part, 'filter' renvoie une liste vide dans le premier cas et traite évidemment le dernier cas. –