Bonjour,
Je suis sous Django 1.9 et ai un modèle de la forme suivante :
1 2 3 4 | class Progression(models.Model): project = models.OneToOneField(Project) value = models.PositiveSmallIntegerField(default=0) proposition = models.PositiveSmallIntegerField(null=True, blank=True) |
Quand un membre met à jour une progression, la valeur spécifiée est stockée dans l'attribut proposition
. Alors, l'instance apparaît dans la liste des progressions à valider. Quand une progression est validée, on a :
1 2 | progression.value = progression.proposition progression.proposition = None |
Ce que je souhaiterais, c'est avoir un formulaire sous forme de tableau, avec toutes les progressions à valider :
Projet | Valeur courante | Proposition | Valider |
---|---|---|---|
… | … | … | □ |
… | … | … | □ |
… | … | … | … |
Mais j'ignore comment m'y prendre. Pour l'instant, je suis parti avec des form sets :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # forms.py class ProgressionValidationForm(forms.Form): validated = forms.BooleanField(label='') # views.py def validate(request): # ... progressions = models.Progression.objects.filter(proposition__isnull=False) context['progressions'] = zip(progressions, django.forms.formset_factory( forms.ProgressionValidationForm, extra=len(progressions) )()) # ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <form action="{% url 'projects:validate_progressions' %}" method="post"> {% csrf_token %} <table border="1"> <tr class="table-header"> <th>Projet</th> <th>Progression courante</th> <th>Proposition</th> <th>Valider</th> </tr> {% for progression, form in progressions %} <tr> <td>{{ progression.project.name }}</td> <td>{{ progression.percentage }} %</td> <td>{{ progression.proposition }} %</td> <td>{{ form.as_p }}</td> </tr> {% endfor %} </table> <input type="submit" value="Envoyer"/> </form> |
Mais j'ignore ensuite comment faire la correspondance au moment de la réception, d'autant plus que la vue appelée (validate_progressions
) n'est pas celle ayant généré le form set.
Merci.
Edit : j'ai aussi essayé de créer simplement mes checkboxes à la main :
1 2 3 4 5 6 7 8 | {% for progression in progressions %} <tr> <td>{{ progression.project.name }}</td> <td>{{ progression.percentage }} %</td> <td>{{ progression.proposition }} %</td> <td><input type="checkbox" name="{{ progression.id }}"/></td> </tr> {% endfor %} |
Mais j'ignore un peu comment récupérer les données proprement par la suite, vu que je n'ai pas de formulaire Django associé.