Amélioration de l'édition des publications des chercheurs.
authorEric Mc Sween <eric.mcsween@gmail.com>
Mon, 29 Nov 2010 17:19:06 +0000 (12:19 -0500)
committerEric Mc Sween <eric.mcsween@gmail.com>
Mon, 29 Nov 2010 17:19:06 +0000 (12:19 -0500)
Les publications sont maintenant one-to-many avec les chercheurs et on utilise
des formsets dynamiques pour l'édition.

Lorsque la publication est une importation de l'ancien système (en un seul
champ), on peut simplement en éditer le texte. Si on veut l'entrer en utilisant
les champs détaillés, il suffit de la supprimer et de la rajouter.

Demande #792

auf_savoirs_en_partage/chercheurs/forms.py
auf_savoirs_en_partage/chercheurs/models.py
auf_savoirs_en_partage/chercheurs/views.py
auf_savoirs_en_partage/context_processors.py
auf_savoirs_en_partage/media/css/global.css
auf_savoirs_en_partage/media/js/chercheur_edit.js
auf_savoirs_en_partage/sql/2010-11-26.sql
auf_savoirs_en_partage/templates/chercheurs/chercheur_form.html
auf_savoirs_en_partage/templates/chercheurs/edit.html
auf_savoirs_en_partage/templates/chercheurs/fiche.html
auf_savoirs_en_partage/templates/chercheurs/inscription.html

index 0f5d0d2..7658cee 100644 (file)
@@ -15,6 +15,15 @@ class PersonneForm(forms.ModelForm):
         model = Utilisateur
         fields = ('nom', 'prenom', 'courriel', 'genre')
         
+    def clean_courriel(self):
+        """On veut s'assurer qu'il n'y ait pas d'autre utilisateur actif
+           avec le même courriel."""
+        courriel = self.cleaned_data['courriel']
+        existing = Personne.objects.filter(courriel=courriel, actif=True).count()
+        if existing:
+            raise forms.ValidationError('Il existe déjà une fiche pour cette adresse électronique')
+        return courriel
+        
 class PersonneInscriptionForm(PersonneForm):
     password = forms.CharField(widget=forms.PasswordInput(), label="Mot de passe") 
     password_confirmation = forms.CharField(widget=forms.PasswordInput(), label="Confirmez votre mot de passe")
@@ -181,16 +190,14 @@ class GroupesForm(forms.Form):
 class PublicationForm(forms.ModelForm):
     class Meta:
         model = Publication
-        fields = ('titre', 'revue', 'annee', 'editeur', 'lieu_edition', 'nb_pages', 'url')
+        fields = ('titre', 'revue', 'annee', 'editeur', 'lieu_edition', 'nb_pages', 'url', 'publication_affichage')
         
-class TheseForm(PublicationForm):
-    titre = forms.CharField(required=True, label="Titre de la thèse ou du mémoire")
-    annee = forms.IntegerField(required=True, label="Année de soutenance (réalisée ou prévue)")
-    editeur = forms.CharField(required=True, label="Directeur de thèse ou de mémoire")
-    lieu_edition = forms.CharField(required=True, label="Établissement de soutenance")
+PublicationFormSet = inlineformset_factory(Chercheur, Publication, form=PublicationForm, extra=1)
+
+class TheseForm(forms.ModelForm):
     class Meta:
-        model = Publication
-        fields = ('titre', 'annee', 'editeur', 'lieu_edition', 'nb_pages', 'url')
+        model = These
+        fields = ('titre', 'annee', 'directeur', 'etablissement', 'nb_pages', 'url')
         
 class ExpertiseForm(forms.ModelForm):
     organisme_demandeur_visible = forms.ChoiceField(
@@ -216,24 +223,18 @@ class ChercheurFormGroup(object):
         self.chercheur = ChercheurForm(data=data, prefix='chercheur', instance=chercheur)
         self.groupes = GroupesForm(data=data, prefix='chercheur', chercheur=chercheur)
         self.personne = personne_form_class(data=data, prefix='personne', instance=chercheur and chercheur.personne.utilisateur)
-        self.publication1 = PublicationForm(data=data, prefix='publication1', instance=chercheur and chercheur.publication1)
-        self.publication2 = PublicationForm(data=data, prefix='publication2', instance=chercheur and chercheur.publication2)
-        self.publication3 = PublicationForm(data=data, prefix='publication3', instance=chercheur and chercheur.publication3)
-        self.publication4 = PublicationForm(data=data, prefix='publication4', instance=chercheur and chercheur.publication4)
-        self.these = TheseForm(data=data, prefix='these', instance=chercheur and chercheur.these)
         self.expertises = ExpertiseFormSet(data=data, prefix='expertise', instance=chercheur)
+        self.these = TheseForm(data=data, prefix='these', instance=chercheur and chercheur.these)
+        self.publications = PublicationFormSet(data=data, prefix='publication', instance=chercheur)
 
     @property
     def has_errors(self):
         return bool(self.chercheur.errors or self.personne.errors or self.groupes.errors or
-                    self.publication1.errors or self.publication2.errors or self.publication3.errors or
-                    self.publication4.errors or self.these.errors or self.expertises.errors)
+                    self.these.errors or self.publications.errors or self.expertises.errors)
 
     def is_valid(self):
         return self.chercheur.is_valid() and self.personne.is_valid() and self.groupes.is_valid() and \
-               self.publication1.is_valid() and self.publication2.is_valid() and \
-               self.publication3.is_valid() and self.publication4.is_valid() and \
-               self.these.is_valid() and self.expertises.is_valid()
+               self.these.is_valid() and self.publications.is_valid() and self.expertises.is_valid()
 
     def save(self):
         if self.is_valid():
@@ -243,22 +244,18 @@ class ChercheurFormGroup(object):
             # Enregistrer d'abord les clés étrangères car on doit les stocker dans
             # l'objet chercheur.
             chercheur.personne = self.personne.save()
-            if self.publication1.cleaned_data['titre']:
-                chercheur.publication1 = self.publication1.save()
-            if self.publication2.cleaned_data['titre']:
-                chercheur.publication2 = self.publication2.save()
-            if self.publication3.cleaned_data['titre']:
-                chercheur.publication3 = self.publication3.save()
-            if self.publication4.cleaned_data['titre']:
-                chercheur.publication4 = self.publication4.save()
-            chercheur.these = self.these.save()
 
             # Puis enregistrer le chercheur lui-même.
             self.chercheur.save()
 
-            # Puis les many-to-many puisqu'on a besoin d'un id.
+            # Puis les objets qui ont des clés étrangères vers nous
+            # puisqu'on a besoin d'un id.
             self.groupes.chercheur = chercheur
             self.groupes.save()
+            self.these.instance.chercheur = chercheur
+            self.these.save()
+            self.publications.instance = chercheur
+            self.publications.save()
             self.expertises.instance = chercheur
             self.expertises.save()
 
@@ -324,7 +321,7 @@ class SendPasswordForm(forms.Form):
         email = cleaned_data.get("email")
         if email:
             try:
-                Utilisateur.objects.get(courriel=email)
+                Utilisateur.objects.get(courriel=email, actif=True)
             except:
                 raise forms.ValidationError("Cette adresse n'existe pas dans notre base de données.")       
         return email
index e3b9d4d..0d980ee 100644 (file)
@@ -11,20 +11,17 @@ GENRE_CHOICES = (('m', 'Homme'), ('f', 'Femme'))
 class Personne(models.Model):
 
     id = models.AutoField(primary_key=True)
-    salutation = models.CharField(max_length=128, null = True, blank = True)
+    salutation = models.CharField(max_length=128, null=True, blank=True)
     nom = models.CharField(max_length=255)
-    prenom = models.CharField(max_length=128, verbose_name = 'Prénom')
-    courriel = models.EmailField(max_length=128, unique=True, verbose_name="Adresse électronique")
-    fonction = models.CharField(max_length=128, null = True, blank = True)
+    prenom = models.CharField(max_length=128, verbose_name='prénom')
+    courriel = models.EmailField(max_length=128, verbose_name="adresse électronique")
+    fonction = models.CharField(max_length=128, null=True, blank=True)
     date_naissance = models.DateField(null=True, blank=True)
-    sousfonction = models.CharField(max_length=128, null = True, blank = True,
-                                    verbose_name = 'Sous-fonction')
-    mobile = models.CharField(max_length=32, null = True, blank = True,
-                              verbose_name = 'Numéro de téléphone portable ')
+    sousfonction = models.CharField(max_length=128, null=True, blank=True, verbose_name='sous-fonction')
+    mobile = models.CharField(max_length=32, null=True, blank=True, verbose_name='numéro de téléphone portable')
     genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
-    commentaire = models.TextField(verbose_name = 'Commentaires', null = True, 
-                                   blank = True)
-    actif = models.BooleanField(editable = False)
+    commentaire = models.TextField(verbose_name='commentaires', null=True, blank=True)
+    actif = models.BooleanField(editable=False, default=True)
 
     def __unicode__(self):
         return u"%s %s, %s" % (self.prenom, self.nom, self.courriel)
@@ -150,31 +147,6 @@ class Chercheur(models.Model):
                                     
     groupes = models.ManyToManyField('Groupe', through='ChercheurGroupe', blank=True, verbose_name='Domaines de recherche')
     
-    #Refactoring, mettre les publications comme etant des many2many;
-    publication1 = models.ForeignKey('Publication',
-                                     db_column='publication1', null=True,
-                                     blank=True, editable=False,
-                                     related_name='publication1',
-                                     verbose_name='Publication 1')
-    publication2 = models.ForeignKey('Publication',
-                                     db_column='publication2', null=True,
-                                     blank=True, editable=False,
-                                     related_name='publication2',
-                                     verbose_name = 'Publication 2')
-    publication3 = models.ForeignKey('Publication',
-                                     db_column='publication3', null=True,
-                                     blank=True, editable=False,
-                                     related_name='publication3',
-                                     verbose_name = 'Publication 3')
-    publication4 = models.ForeignKey('Publication',
-                                     db_column='publication4', null=True,
-                                     blank=True, editable=False,
-                                     related_name='publication4',
-                                     verbose_name = 'Publication 4')
-    
-    these = models.ForeignKey('Publication', db_column='these', null=True,
-                              blank=True, related_name='These', editable=False)
-    
     # Activités en francophonie
     membre_instance_auf = models.BooleanField(default=False, verbose_name="est ou a déjà été membre d'une instance de l'AUF")
     membre_instance_auf_details = models.CharField(max_length=255, blank=True, verbose_name="détails")
@@ -234,22 +206,33 @@ class Chercheur(models.Model):
         super(Chercheur, self).save()
 
 class Publication(models.Model):
-    id = models.AutoField(primary_key=True, db_column='id')
-    titre = models.CharField(max_length=255, db_column='titre', null=True, blank=True, verbose_name = 'Titre')
-    revue = models.CharField(max_length=255, db_column='revue', null=True, blank=True, verbose_name = 'Revue')
-    annee = models.IntegerField(db_column='annee', null=True, blank=True, verbose_name='Année de publication')
-    editeur = models.CharField(max_length=255, db_column='editeur', null=True, blank=True, verbose_name = 'Éditeur')
-    lieu_edition = models.CharField(max_length=255, db_column='lieu_edition', null=True, blank=True, verbose_name = 'Lieu d\'édition')
-    nb_pages = models.CharField(max_length=255, db_column='nb_pages', null=True, blank=True, verbose_name = 'Nombre de pages')
-    url = models.CharField(max_length=255, db_column='url', null=True, blank=True, verbose_name = 'Lien vers la publication')
+    chercheur = models.ForeignKey(Chercheur, related_name='publications')
+    titre = models.CharField(max_length=255, null=True, blank=True, verbose_name='titre')
+    revue = models.CharField(max_length=255, null=True, blank=True, verbose_name='Revue')
+    annee = models.IntegerField(null=True, blank=True, verbose_name='Année de publication')
+    editeur = models.CharField(max_length=255, null=True, blank=True, verbose_name='Éditeur')
+    lieu_edition = models.CharField(max_length=255, null=True, blank=True, verbose_name="Lieu d'édition")
+    nb_pages = models.CharField(max_length=255, null=True, blank=True, verbose_name='Nombre de pages')
+    url = models.CharField(max_length=255, null=True, blank=True, verbose_name='Lien vers la publication')
     #Migration des publications depuis l'ancien repertoire de chercheurs
-    publication_affichage = models.TextField(verbose_name = 'Publication', null = True, 
-                                   blank = True)
-    actif = models.BooleanField(editable = False, db_column='actif')
+    publication_affichage = models.TextField(verbose_name='Publication', null=True, blank=True)
+    actif = models.BooleanField(editable=False)
     
     def __unicode__(self):
-        return u"%s" % (self.titre)
+        return self.titre
         
+class These(models.Model):
+    chercheur = models.OneToOneField(Chercheur, primary_key=True)
+    titre = models.CharField(max_length=255, verbose_name='Titre de la thèse ou du mémoire')
+    annee = models.IntegerField(verbose_name='Année de soutenance (réalisée ou prévue)')
+    directeur = models.CharField(max_length=255, verbose_name='Directeur de thèse ou de mémoire')
+    etablissement = models.CharField(max_length=255, verbose_name='Établissement de soutenance')
+    nb_pages = models.IntegerField(verbose_name='Nombre de pages', blank=True, null=True)
+    url = models.CharField(max_length=255, verbose_name='Lien vers la publication', blank=True)
+
+    def __unicode__(self):
+        return self.titre
+
 class Expertise(models.Model):
     id = models.AutoField(primary_key=True, db_column='id')
     chercheur = models.ForeignKey(Chercheur, related_name='expertises')
index b8fc891..bed9e20 100644 (file)
@@ -34,7 +34,7 @@ def send_password(request):
     if request.method == "POST":
         form = SendPasswordForm(data=request.POST)
         if form.is_valid():
-            u = Utilisateur.objects.get(courriel=form.cleaned_data['email'])
+            u = Utilisateur.objects.get(courriel=form.cleaned_data['email'], actif=True)
             code = u.get_new_password_code()
             link = "%s/accounts/new_password/%s/%s/" % (settings.SITE_ROOT_URL, u.courriel, code)
 
@@ -59,7 +59,7 @@ def send_password(request):
             context_instance = RequestContext(request))
             
 def new_password(request, email, code):
-    u = Utilisateur.objects.get(courriel=email)
+    u = Utilisateur.objects.get(courriel=email, actif=True)
     original_code = u.get_new_password_code()
     message=""
     if(code == original_code):
@@ -145,7 +145,7 @@ def inscription(request):
 def desinscription(request):
     """Désinscription du chercheur"""
     try:
-        chercheur = Chercheur.objects.get(personne__courriel=request.user.email)
+        chercheur = Chercheur.objects.get(personne__courriel=request.user.email, personne__actif=True)
     except Chercheur.DoesNotExist:
         return HttpResponseRedirect(url('chercheurs.views.chercheur_login'))
     if request.method == 'POST':
@@ -177,7 +177,7 @@ def edit(request):
         
     return render_to_response("chercheurs/edit.html",
                               dict(forms=forms, chercheur=chercheur),
-                              context_instance = RequestContext(request))
+                              context_instance=RequestContext(request))
             
 @login_required()
 def perso(request):
index 236a5a7..025fcb5 100644 (file)
@@ -8,7 +8,7 @@ def user_chercheur(request):
     user_sep = Utilisateur.objects.none()
     if request.user.is_authenticated():
         try:
-            user_chercheur = Chercheur.objects.get(personne__courriel=request.user.email)
+            user_chercheur = Chercheur.objects.get(personne__courriel=request.user.email, personne__actif=True)
             user_sep = Utilisateur.objects.get(id=user_chercheur.personne_id)
         except:
             pass
index 4e169cd..23585f8 100644 (file)
@@ -53,7 +53,7 @@ form p { margin-bottom:2px }
 fieldset { clear:both; padding:10px; margin:0 0 0 0; position:relative }
 fieldset { border-color:#000000; border-width:1px 0 0 0; border-style:solid none none none; }
 fieldset { font-size:100%; }
-fieldset fieldset { border:1px solid #ccc; background:#fafafa; margin:10px }
+fieldset fieldset { border:1px solid #ccc; background:#fafafa; margin:10px; padding: 15px; }
 legend { font-size:150%; font-weight:bold; color:#000000; margin:0 0 0 0; padding:0 5px; }
 
 label {
@@ -225,8 +225,8 @@ color:red;
 .horizontal-radio-buttons ul { margin-left:0 }
 .horizontal-radio-buttons li { display:inline }
 
-.delete-row { position:absolute; top:10px; right:10px }
-.add-row { float:right; margin-right:21px }
+.delete-row { position:absolute; top:5px; right:5px }
+.add-row { float:right; margin-right:16px }
 
 .cadre { width: 60%; margin: 100px auto; padding: 20px; background: #f9f9f9; border: 1px solid #aaa }
 
index 38876ea..9097d30 100644 (file)
             deleteText: 'supprimer cette expertise',
             formCssClass: 'dynamic-form-expertises'
         });
+        $('#publications fieldset').formset({
+            prefix: 'publication',
+            addText: 'ajouter une publication',
+            deleteText: 'supprimer cette publication',
+            formCssClass: 'dynamic-form-publications'
+        });
         update_etablissement_autre()
         $('#id_chercheur-etablissement').change(update_etablissement_autre)
     });
index 9c4f8c4..ae0b80e 100644 (file)
@@ -1 +1,52 @@
+-- Le chercheur n'a pas besoin d'une colonne "actif". C'est la "personne" qui a
+-- le champ "actif".
+
 ALTER TABLE chercheurs_chercheur DROP COLUMN actif;
+
+-- On déplace les thèses dans leur propre table pour les isoler des
+-- publications.
+
+CREATE TABLE `chercheurs_these` (
+    `chercheur_id` integer NOT NULL PRIMARY KEY,
+    `titre` varchar(255) NOT NULL,
+    `annee` integer NOT NULL,
+    `directeur` varchar(255) NOT NULL,
+    `etablissement` varchar(255) NOT NULL,
+    `nb_pages` integer,
+    `url` varchar(255) NOT NULL
+)
+;
+ALTER TABLE `chercheurs_these` ADD CONSTRAINT `chercheur_id_refs_id_727f1a45` FOREIGN KEY (`chercheur_id`) REFERENCES `chercheurs_chercheur` (`id`);
+
+INSERT INTO chercheurs_these (chercheur_id, titre, annee, directeur, etablissement, nb_pages, url)
+SELECT c.id, p.titre, p.annee, p.editeur, p.lieu_edition, NULLIF(p.nb_pages, ''), p.url
+FROM chercheurs_publication p
+INNER JOIN chercheurs_chercheur c ON c.these = p.id;
+
+DELETE p FROM chercheurs_publication p
+INNER JOIN chercheurs_chercheur c ON c.these = p.id;
+
+ALTER TABLE chercheurs_chercheur DROP COLUMN these;
+
+-- Les publications auront maintenant une foreign key vers les chercheurs
+-- plutôt que le contraire.
+
+ALTER TABLE chercheurs_publication ADD COLUMN `chercheur_id` integer NOT NULL AFTER id;
+ALTER TABLE `chercheurs_publication` ADD CONSTRAINT `chercheur_id_refs_id_4bd3fee4` FOREIGN KEY (`chercheur_id`) REFERENCES `chercheurs_chercheur` (`id`);
+
+UPDATE chercheurs_publication p 
+INNER JOIN chercheurs_chercheur c ON p.id IN (c.publication1, c.publication2, c.publication3, c.publication4)
+SET p.chercheur_id = c.id;
+
+ALTER TABLE chercheurs_chercheur 
+    DROP COLUMN publication1,
+    DROP COLUMN publication2,
+    DROP COLUMN publication3,
+    DROP COLUMN publication4;
+
+-- On ne peut pas à la fois forcer une clé unique sur le courriel et conserver
+-- les comptes inactifs dans la table.
+
+ALTER TABLE chercheurs_personne
+    DROP KEY courriel,
+    ADD KEY courriel (courriel);
index d0385f8..e61e699 100644 (file)
         <div style="clear:both"></div>
     </div>
 </fieldset>
+
+<fieldset id="publications">
+    <legend>Publications</legend>
+    {{ forms.publications.management_form }}
+    {% for form in forms.publications.forms %}
+    <fieldset>
+        <table>
+            {% if form.initial.publication_affichage %}
+            {% form_field form.publication_affichage %}
+            {% else %}
+            {% form_field form.titre %}
+            {% form_field form.revue %}
+            {% form_field form.annee %}
+            {% form_field form.editeur %}
+            {% form_field form.lieu_edition %}
+            {% form_field form.nb_pages %}
+            {% form_field form.url %}
+            {% endif %}
+        </table>
+        {{ form.id }}
+        {{ form.DELETE }}
+    </fieldset>
+    {% endfor %}
+</fieldset>
index b4661f8..2f30de5 100644 (file)
@@ -7,60 +7,8 @@
 
 {% block contenu %}
 <h4>{{chercheur.personne.prenom}} {{chercheur.personne.nom}}</h4>
-<form method="post">
+<form method="post" action="">
     {% include "chercheurs/chercheur_form.html" %}    
-    <fieldset>
-        <legend>Publications</legend>
-        <div>
-            <div class="infotip">
-              <strong>Renseignements préalablements enregistrés</strong>
-              <p>{{forms.publication1.instance.publication_affichage|default:"-"}}</p>
-            </div>
-            <div class="publication">
-              {% with forms.publication1 as form %}
-                  {% include "table_form.html" %}
-              {% endwith %}
-            </div>
-            <div style="clear:both"></div>
-        </div>
-        <p id="show_publications">+ Autres publications</p>
-        <div class="publications_autre">
-            <h6>- Publication 2</h6>
-            <div class="infotip">
-              <strong>Renseignements préalablements enregistrés</strong>
-              <p>{{forms.publication2.instance.publication_affichage|default:"-"}}</p>
-            </div>
-            <div class="publication">
-                {% with forms.publication2 as form %}
-                    {% include "table_form.html" %}
-                {% endwith %} 
-            </div>
-            <div style="clear:both"></div>
-            <h6>- Publication 3</h6>
-            <div class="infotip">
-              <strong>Renseignements préalablements enregistrés</strong>
-              <p>{{forms.publication3.instance.publication_affichage|default:"-"}}</p>
-            </div>
-            <div class="publication">
-                {% with forms.publication3 as form %}
-                    {% include "table_form.html" %}
-                {% endwith %}
-            </div>
-            <div style="clear:both"></div>     
-            <h6>- Publication 4</h6>
-            <div class="infotip">
-              <strong>Renseignements préalablements enregistrés</strong>
-              <p>{{forms.publication4.instance.publication_affichage|default:"-"}}</p>
-            </div>
-            <div class="publication">
-                {% with forms.publication4 as form %}
-                    {% include "table_form.html" %}
-                {% endwith %}
-            </div>
-            <div style="clear:both"></div>
-        </div>
-    </fieldset>
-
     <input type="submit" value="Sauvegarder" />
 </form>
 {% endblock %}
index 82344c3..260bc97 100644 (file)
     {% endfor %}
     {% endif %}
 
-    <h5>Publications</h5>
-    <table id="publications">
-        {% if chercheur.these %}
-        <tr class="souligne">
-            <td class="label">Thèse ou mémoire:</td>
-            {% with chercheur.these as publication %}{% include "chercheurs/publication_display.html" %}{% endwith %}
-        </tr>
-        {% endif %}
-        {% if chercheur.publication1 or chercheur.publication2 or chercheur.publication3 or chercheur.publication4 %}
-        <tr>
-            <td class="label">Publications:</td>
-            {% with chercheur.publication1 as publication %}{% include "chercheurs/publication_display.html" %}{% endwith %}
-        </tr>
+    {% if chercheur.these %}
+    <h5>Thèse ou mémoire</h5>
+    <table>
         <tr>
-            <td class="label"></td>
-            {% with chercheur.publication2 as publication %}{% include "chercheurs/publication_display.html" %}{% endwith %}
+            <td class="label">Thèse ou mémoire:</td>
+            <td>
+                {% if chercheur.these.url %}
+                <i><a href="{{ chercheur.these.url }}">{{ chercheur.these.titre }}</a></i>,
+                {% else %}
+                <i>{{ chercheur.these.titre }}</i>, 
+                {% endif %}
+                {{ chercheur.these.etablissement }},
+                {{ chercheur.these.annee }}{% if chercheur.these.nb_pages %},
+                {{ chercheur.these.nb_pages }} pages{% endif %}.
+            </td>
         </tr>
         <tr>
-            <td class="label"></td>
-            {% with chercheur.publication3 as publication %}{% include "chercheurs/publication_display.html" %}{% endwith %}
+            <td class="label">Directeur:</td>
+            <td>{{ chercheur.these.directeur }}</td>
         </tr>
+    </table>
+    {% endif %}
+
+    {% if chercheur.publications %}
+    <h5>Publications</h5>
+    <table id="publications">
+        {% for publication in chercheur.publications.all %}
         <tr>
-            <td class="label"></td>
-            {% with chercheur.publication4 as publication %}{% include "chercheurs/publication_display.html" %}{% endwith %}
+            {% if forloop.first %}
+            <td class="label">Publications:</td>
+            {% else %}
+            <td></td>
+            {% endif %}
+            {% include "chercheurs/publication_display.html" %}
         </tr>
-        {% endif %}
+        {% endfor %}
     </table>
+    {% endif %}
 </div>
index ffb56b6..a8ea2e9 100644 (file)
 
 <form method="post">
     {% include "chercheurs/chercheur_form.html" %}   
-    <fieldset>
-        <legend>Publications</legend>
-        <div>
-            <div class="publication">
-              {% with forms.publication1 as form %}
-                  {% include "table_form.html" %}
-              {% endwith %}
-            </div>
-            <div style="clear:both"></div>
-        </div>
-        <p id="show_publications">+ Autres publications</p>
-        <div class="publications_autre">
-            <h6>- Publication 2</h6>
-            {% with forms.publication2 as form %}
-                {% include "table_form.html" %}
-            {% endwith %} 
-            <h6>- Publication 3</h6>
-            {% with forms.publication3 as form %}
-                {% include "table_form.html" %}
-            {% endwith %}     
-            <h6>- Publication 4</h6>
-            {% with forms.publication4 as form %}
-                {% include "table_form.html" %}
-            {% endwith %}
-        </div>
-    </fieldset>
-    <br />
     <input type="submit" name="Submit" value="Inscription" class="bouton" />
 </form>
 {% endblock %}