Django crée automatiquement un champ id comme clé primaire.
Maintenant, j'ai besoin d'obtenir l'objet par cet identifiant.
object = Class.objects.filter()
Comment écrire ce filtre?
django
django-models
django-orm
user469652
la source
la source
pk
est le moyen préféré de faire référence à la clé primaire pour n'importe quel modèle. Leid
champ 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 deid
champ.id
dans une fonction intégrée qui renvoie l'identité d'un objet. Dans la majorité des cas, le fait de référencer les choses parid
fera la bonne chose, par exemple leClass.objects.get(id=this_object_id)
travail. Mais c'est quelque chose à considérer je suppose.Je suis arrivé ici pour le même problème, mais pour une raison différente:
Ce code soulevait une exception ImportError. Ce qui me déroutait, c'est que le code ci-dessous s'exécutait correctement et renvoyait un jeu de résultats comme prévu:
Queue de la trace de la
get()
méthode:En lisant le code à l'intérieur de Django
loading.py
, je suis arrivé à la conclusion que j'avaissettings.py
un mauvais chemin vers mon application qui contient maClass
définition de modèle. Tout ce que j'avais à faire était de corriger le chemin d'accès à l'application et laget()
méthode s'exécutait correctement .Voici mon
settings.py
avec le chemin corrigé:)
Toute la confusion a été causée parce que j'utilise l'ORM de Django de manière autonome, donc l'espace de noms devait refléter cela.
la source
Vous pouvez également faire:
Cela fonctionne, mais il se peut que je ne sois pas sûr qu'il soit pris en charge dans Django 2.
la source
Vous pouvez utiliser:
Cela renverra un ensemble de requêtes même s'il obtient un objet. Si vous avez besoin d'un seul objet, utilisez:
la source
Vous pouvez également utiliser le raccourci get_object_or_404 django. Il génère une erreur 404 si l'objet n'est pas trouvé.
la source