2010-11-29 2 views

Répondre

92

Si vous souhaitez obtenir un objet, en utilisant get() est plus simple:

obj = Class.objects.get(pk=this_object_id) 
+9

FYI, 'pk' est la façon préférée de se référer à la clé primaire pour n'importe quel modèle. Le champ 'id' n'est généré que si l'auteur du modèle ne désigne pas spécifiquement une clé primaire. Si l'auteur * a * spécifié * un champ de clé primaire qui n'est pas nommé "id", il n'y aura pas de champ "id". –

+0

Aussi FYI, 'id' dans une fonction intégrée qui retourne l'identité d'un objet. Dans la majorité des cas, référencer les choses par «id» fera la bonne chose, par ex. 'Class.objects.get (id = this_object_id)' travail. Mais c'est quelque chose à considérer je suppose. – Tom

9

Je suis ici pour le même problème, mais pour une autre raison:

Class.objects.get(id=1) 

Ce code élevais une exception ImportError. Ce qui était me confondre était que le code ci-dessous exécuté fin et a renvoyé un résultat fixé comme prévu:

Class.objects.all() 

Queue du retraçage pour la méthode get():

File "django/db/models/loading.py", line 197, in get_models 
    self._populate() 
File "django/db/models/loading.py", line 72, in _populate 
    self.load_app(app_name, True) 
File "django/db/models/loading.py", line 94, in load_app 
    app_module = import_module(app_name) 
File "django/utils/importlib.py", line 35, in import_module 
    __import__(name) 
ImportError: No module named myapp 

La lecture du code à l'intérieur Django loading.py, je est arrivé à la conclusion que mon settings.py avait un mauvais chemin à mon application qui contient ma définition de modèle Class. Tout ce que j'avais à faire était de corriger le chemin vers l'application et la méthode get() s'est bien exécutée.

Voici mon settings.py avec le chemin corrigé:

INSTALLED_APPS = (
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    # ... 
    'mywebproject.myapp', 

)

Toute la confusion a été causée parce que je me sers ORM de Django comme autonome, de sorte que l'espace de noms devait refléter.

Questions connexes