Bonjour,
J’ai recemment voulu me mettre a Django pour essayer de developper une petite app pour aider la boite d’un pote et je bloque sur un truc tout con.
J’ai bien défini mes modeles, mes vues et mes templates.
Cependant sur une des vues le template doit agréger les données de deux modèles (les collaborateurs et les missions)
Je me retrouve donc avec ce code :
Pour les vues
from django.http import HttpResponse
from django.template import loader
from .models import Collaborateurs, Expe
def index(request):
liste_collab = Collaborateurs.objects.all()
template = loader.get_template('dc/index.html')
context = {
'liste_collab' : liste_collab
}
return HttpResponse(template.render(context, request))
def detail_collab(request, collaborateurs_id ):
detail_collaborateur = Collaborateurs.objects.filter(id=collaborateurs_id)
liste_expe = Expe.objects.filter(collab=collaborateurs_id)
template = loader.get_template('dc/cv.html')
context = {
'detail_collaborateur' : detail_collaborateur,
'liste_expe' : liste_expe,
}
return HttpResponse(template.render(context, request))
Pour les modèles :
from django.db import models
class Collaborateurs(models.Model):
nom = models.CharField(max_length=100)
prenom = models.CharField(max_length=100)
titre = models.CharField(max_length=200)
texte_introductif = models.CharField(max_length=700)
nb_annees_exp = models.IntegerField(default = 0)
comp_1 = models.CharField(max_length=200)
comp_2 = models.CharField(max_length=200)
comp_3 = models.CharField(max_length=200)
comp_4 = models.CharField(max_length=200)
def __str__(self):
return self.nom
class Client (models.Model):
nom_client = models.CharField(max_length=200)
secteur = models.CharField(max_length=100)
def __str__(self):
return self.nom_client
class Expe(models.Model):
collab = models.ForeignKey(Collaborateurs, on_delete=models.CASCADE)
poste = models.CharField(max_length=200)
client = models.ForeignKey(Client, on_delete=models.CASCADE)
intro = models.CharField(max_length=700)
descript = models.CharField(max_length=2000)
env_tech = models.CharField(max_length=700)
date_debut = models.DateField('date_debut')
date_fin = models.DateField('date_fin')
def __str__(self):
return self.poste
Et pour le template qui me pose problème :
{% if detail_collaborateur %}
<p> Nom : {{ detail_collaborateur.nom }}</br>
Prenom : {{ detail_collaborateur.prenom }}</br>
Titre : {{ detail_collaborateur.titre }}</br>
Texte introduction : </br>
Nombre d'annees d'experiences : </br>
Competences 1 : </br>
Competences 2 : </br>
Competences 3 : </br>
Competences 4 : </br>
{% if liste_expe %}
{% for expe in liste_expe %}
<p> ==============================================</br>
Mission : {{ expe.poste }} </br>
Client : {{expe.client}} </br>
Texte introductif : {{ expe.intro }}</br>
Description de la mission : {{expe.descript}}</br>
Environnement technique : {{expe.env_tech}}</br>
Date début : {{expe.date_debut}} </br>
Date de fin : {{expe.date_fin}} </br>
==============================================</p>
{% endfor %}
{% else %}
<p>Pas de mission.</p>
{% endif %}
{% else %}
<p>Erreur</p>
{% endif %}
Quand je me rend sur ma page toutes les données des missions s’affichent parfaitement mais les données du collaborateur ne s’affiche pas (mais aucune erreur n’est remontée par Django) :
J’ai beau chercher je ne vois pas ou j’ai fait une erreur (enfin vu mon niveau je me doute bien que j’ai fait une erreur )
Ou-me suis-je trompé ?
merci de votre aide