2010-11-19 14 views
4

Est-il possible de rendre chaque case individuellement, plutôt que d'avoir à regrouper toutes les cases dans une liste, comme c'est le cas par défaut? Quelque chose commeDjango: CheckboxSelectMultiple

{{ myform.cbmultiple.0 }} 

Pour rendre juste la première case à cocher? En fait, le 0 devrait être une variable pour que je puisse boucler ...

La raison pour laquelle je demande est parce que je veux afficher ces cases à cocher d'une manière plutôt compliquée, ainsi le widget par défaut ne fonctionne pas pour moi . Je ne veux pas vraiment surcharger le widget, car il est beaucoup plus facile de le rendre en utilisant la syntaxe du template que dans le code python, en plus, c'est beaucoup de travail pour un one-off.

Répondre

2

Il existe un moyen de rendre manuellement CheckboxSelectMultiple() dans le modèle afin de pouvoir faire ce que vous voulez avec. Pour plus de détails, consultez this post.

La solution pourrait être quelque chose comme ceci:

<table> 
<thead> 
    <tr> 
    <td>&nbsp;</td> 
    <td>V</td> 
    <td>S</td> 
    </tr> 
</thead>  
{% for pk, choice in form.options.field.widget.choices %} 
<tr> 
<td><a href="/link/{{ choice }}">{{ choice }}</a></td> 
<td><label for="id_options_{{ forloop.counter0 }}"><input {% for option in app.options.all %}{% if option.pk == pk %}checked="checked"{% endif %}{% endfor %} type="checkbox" id="id_options_{{ forloop.counter0 }}" value="{{ pk }}" name="options" /></label></td> 
</tr> 
{% endfor %}     
</table> 
3

Non, vous ne pouvez pas faire cela parce que tout le HTML est généré par le widget's render method à la fois. Vous pouvez seulement créer votre propre classe de widget et remplacer la méthode render afin qu'elle produise le HTML d'une manière qui vous convient!

+1

C'est affreux: \ je trouve des formes de Django me rendre la vie beaucoup plus difficile, pas plus facile. Je pense que je vais boycotter le foutu widget et le rendre moi-même avec HTML, puis le retirer à la place de 'request.POST'. – mpen

+0

Eh bien, vous avez raison, même si ce ne serait que quelques lignes de python. Il est toujours horrible que le HTML soit dans les classes de widget et n'utilise aucun type de template! –

+0

Ouais ... c'est le (manque de) séparation de la logique et de la présentation que je n'aime pas. Je veux que tous les trucs de vue soient réunis, parce que je sais que je vais encore peaufiner le look. – mpen