Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Accéder à l'id d'une instance sans appeler __str__

#1 23-06-2017 16:52:45

maydee
Membre
Inscription : 28-02-2017
Messages : 5

Accéder à l'id d'une instance sans appeler __str__

Bonjour à tous,

Je suis assez perplexe devant le comportement de Django quand on essaye d'accéder à l'ID d'une instance d'un modèle. Je m'explique, par exemple en console si je declare:

instance = MonModel.objects.get(id=1) #même résultat avec la fonction filter()
instance.id

J'obtiens bien "1", même si la fonction __str__ du modèle renvoi self.name
Par contre dans mon code, j'essaye de récuperer une liste d'ID comme suit:

for i in range(after):
    id_list.append(ArticleSW.objects.get(id=new[i].id))

Je me retrouve avec une liste de ce que renvoi __str__

Comment accéder à ces ID directement ? Et pourquoi ce comportement ?

Merci par avance pour vos réponses !

Hors ligne

#2 23-06-2017 22:24:17

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Accéder à l'id d'une instance sans appeler __str__

Pas de soucis, tu n'es pas loin du tout.
Ce que tu vois est une évaluation d'une liste d'articlesw. En revanche, pour la représenter, les instances sont transformées en chaine et donc tu vois le résultat du __str__.
Du coup, ce que tu veux ajouter est l'ID de l'article et non l'article lui-même, soit:

id_list.append(ArticleSW.objects.get(id=new[i].id).id)

Ceci dit, l'intérêt d'aller chercher l'article alors que tu ne prends que l'id est limité, et donc tu peux aussi faire:

id_list.append(new[i].id)

Hors ligne

#3 25-06-2017 09:10:35

maydee
Membre
Inscription : 28-02-2017
Messages : 5

Re : Accéder à l'id d'une instance sans appeler __str__

Hum j'aurais du me douter que le problème venait de mon code , merci pour ta réponse et effectivement la deuxième solution est plus optimisée.

Hors ligne

  • Accueil
  • » Django-fr
  • » Accéder à l'id d'une instance sans appeler __str__

Pied de page des forums