Vous n'êtes pas identifié(e).
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
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
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