Django crée automatiquement un champ d'identifiant en tant que clé primaire.
Maintenant, je dois obtenir l'objet par cet identifiant.
object = Class.objects.filter()
Comment écrire ce filtre?
Si vous voulez obtenir un objet, utiliser get()
est plus simple:
obj = Class.objects.get(pk=this_object_id)
Je suis arrivé ici pour le même problème, mais pour une raison différente:
Class.objects.get(id=1)
Ce code générait une exception ImportError. Ce qui me déroutait, c'était que le code ci-dessous s'exécutait correctement et renvoyait un jeu de résultats comme prévu:
Class.objects.all()
Queue du traceback 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
En lisant le code dans le loading.py
De Django, je suis parvenu à la conclusion que mon settings.py
Avait un mauvais chemin vers mon application, qui contenait ma définition de modèle Class
. Tout ce que je devais faire était de corriger le chemin d'accès à l'application et à la méthode get()
correctement 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 j'utilise l'ORM de Django en tant qu'entité autonome, donc l'espace de noms devait refléter cela.