web-dev-qa-db-fra.com

Django interrogation de base de données: Comment obtenir un objet par son identifiant?

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?

78
user469652

Si vous voulez obtenir un objet, utiliser get() est plus simple:

obj = Class.objects.get(pk=this_object_id)
145
iridescent

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.

13
Lucio Paiva