Django-fr

Forum

#1 11-02-2011 15:51:40

Yves Bourhis
Membre
Inscription : 18-01-2011
Messages : 26

récupérer les champs liés ( question de newbie)

Bonjour,

étant totalement bloqué, je me permets de vous soumettre une question de débutant : comment puis-je récupérer les champs liés dans une vue ?

Par exemple, je gère une table de "stages" liés à des "étudiants", des "Profs" et des "Sociétés" et si je fais une vue simple :

def detail_stage(request, st_numero):
     s = get_object_or_404(Stage, pk=st_numero)
     return render_to_response('stages/detail_stage.html', {'stage': s})

je récupére bien mes informations comme dans l'interface d'administration, mais dans cette fiche détaillée je voudrais également accéder aux champs qui ne sont pas directement dans la table "Stage" (par exemple, l'adresse de la "Société" et celle de l'"Etudiant") : comment faut-il s'y prendre ?
Faut-il rajouter une ligne du style :
     e = get_object_or_404(Etudiant, pk=s.st_et_numero)
(j'ai essayé, mais je n'arrive pas à renvoyer le résultat dans mon "template") ?
Faut-il une requête SQL, mais comment l'intégrer ?
Je n'arrive pas à trouver un exemple concret dans la documentation en ligne alors si quelqu'un pouvait m'indiquer un exemple...

Merci d'avance,
Bon week-end.

N.B. : dans mon cas j'ai le modèle suivant :

class Stage(models.Model):
     st_numero = models.AutoField(primary_key=True)
     st_et_numero = models.ForeignKey(Etudiant, verbose_name="Etudiant")
     st_so_numero = models.ForeignKey(Societe, verbose_name="Société")
     st_pr_numero = models.ForeignKey(Prof, verbose_name="Tuteur IUT",  default=10000)
[...]
class Societe(models.Model):
     so_numero = models.AutoField('N°',  primary_key=True)
     so_nom = models.CharField('Nom',  max_length=100)
     so_division = models.CharField('Division',  max_length=100, blank=True)
     so_adresse1 = models.CharField('Adresse',  max_length=100, blank=True)
     so_adresse2 = models.CharField('Adresse (complément)',  max_length=100, blank=True)
     so_code_post = models.CharField('Code postal',  max_length=5, blank=True)
     so_ville = models.CharField('Ville',  max_length=100, blank=True)
[...]
class Prof(models.Model):
     pr_numero = models.AutoField(primary_key=True)
     pr_nom = models.CharField('Nom',  max_length=50)
     pr_prenom = models.CharField('Prénom',  max_length=50, blank=True)
[...]
class Etudiant(models.Model):
     et_numero = models.CharField('N° UBO',  max_length=9,  primary_key=True)
     et_nom = models.CharField('Nom',  max_length=50)
     et_prenom = models.CharField('Prénom',  max_length=50, blank=True)
     et_adresse1 = models.CharField('Adresse',  max_length=100, blank=True)
     et_adresse2 = models.CharField('Adresse (complément)',  max_length=100, blank=True)
     et_code_post = models.CharField('Code postal',  max_length=5, blank=True)
     et_ville = models.CharField('Ville',  max_length=100, blank=True)
[...]

Hors ligne

#2 11-02-2011 16:51:20

Romain
Membre
Inscription : 11-08-2010
Messages : 27

Re : récupérer les champs liés ( question de newbie)

Le 11 févr. 2011 à 15:51, Yves Bourhis a écrit :

> Bonjour,
>
> étant totalement bloqué, je me permets de vous soumettre une question de débutant : comment puis-je récupérer les champs liés dans une vue ?
>
> Par exemple, je gère une table de "stages" liés à des "étudiants", des "Profs" et des "Sociétés" et si je fais une vue simple :
>
> def detail_stage(request, st_numero):
>    s = get_object_or_404(Stage, pk=st_numero)
>    return render_to_response('stages/detail_stage.html', {'stage': s})
>
> je récupére bien mes informations comme dans l'interface d'administration, mais dans cette fiche détaillée je voudrais également accéder aux champs qui ne sont pas directement dans la table "Stage" (par exemple, l'adresse de la "Société" et celle de l'"Etudiant") : comment faut-il s'y prendre ?
> Faut-il rajouter une ligne du style :
>    e = get_object_or_404(Etudiant, pk=s.st_et_numero)
> (j'ai essayé, mais je n'arrive pas à renvoyer le résultat dans mon "template") ?
> Faut-il une requête SQL, mais comment l'intégrer ?
> Je n'arrive pas à trouver un exemple concret dans la documentation en ligne alors si quelqu'un pouvait m'indiquer un exemple...

tu peux directement dans ton template afficher quelquechose du genre {{ stage.st_so_numero.so_nom }}. Cf l'encadré "behind the scenes" dans la doc [1] pour les détails.

sinon, tu récupères les objets qui t'intéressent dans ta vue, et tu les passes dans le contexte : render_to_response('template.html', {'un_objet': objet, 'un_autre_objet': autre_objet})



[1] http://docs.djangoproject.com/en/1.2/topics/templates/#variables

Hors ligne

#3 14-02-2011 08:57:34

Yves Bourhis
Membre
Inscription : 18-01-2011
Messages : 26

Re : récupérer les champs liés ( question de newbie)

Bonjour,

Le 11/02/2011 16:51, Romain Gaches a écrit :
> tu peux directement dans ton template afficher quelquechose du genre {{ stage.st_so_numero.so_nom }}

Ca marche : je me disais aussi que ça devait être beaucoup plus simple que ce que je testais !

Merci beaucoup,
cordialement.

Hors ligne

Pied de page des forums