2010-11-15 5 views

Répondre

2

Comme @Jeeyoung prouvé, il est impossible de connaître le fonctionnement sur DoesNotExist erreurs pour obtenir les arguments utilisés ... J'ai donc écrit une petite fonction qui patches de singe objects.get, attraper DoesNotExists et en ajoutant la requête à l'erreur:

 
>>> class MyModel(m.Model): 
...  pass 
... 
>>> patch_objects_get(MyModel) 
>>> MyModel.objects.get(id=3141) 
Traceback (most recent call last): 
... 
DoesNotExist: MyModel matching {"id": 42} does not exist 
>>> 

le code est à https://gist.github.com/702513

+0

Comment puis-je étendre ce script pour corriger tous les modèles présents dans mon application? –

+0

Je ne sais pas avec certitude, mais vous pouvez probablement monkeypatch 'Model' de' settings.py' ou créer une classe de base commune. –

1

Je regardais le code get(), et trouvé ce qui suit

raise self.model.DoesNotExist("%s matching query does not exist." 
    % self.model._meta.object_name) 
raise self.model.MultipleObjectsReturned("get() returned more than one %s -- it returned %s! Lookup parameters were %s" 
    % (self.model._meta.object_name, num, kwargs)) 

Je suppose qu'il n'y a rien de bon moyen pour connaître l'exception.

Vous pouvez soit faire ce que Felix Kling a suggéré (écrire une méthode wrapper) autour de get(). Vous pouvez même le rendre plus générique en faisant quelque chose comme:

def my_get(*args, **kwargs): 
    try: 
     Foo.object.get(*args, **kwargs) 
    except Foo.DoesNotExist: 
     print "No object matching conditions (*%s, **%s) found." % (args, kwargs) 
Questions connexes