2009-06-04 8 views
1

Je veux faire (commandé) formulaire de liste de chansons.Comment diviser le modèle ModelMultipleChoiceField de django dans un fichier modèle?

models.py

class Song(models.Model): 
    title = models.CharField(max_length=60) 

class List(models.Model): 
    title = models.CharField(max_length=100) 
    songs = models.ManyToManyField(Song, through='Order') 

class Order(models.Model): 
    list = models.ForeignKey(List) 
    song = models.ForeignKey(Song) 
    order = models.IntegerField(unique=True) 

et,

forms.py

class ListEditForm(forms.Form): 
    title = forms.CharField(
     label='List Title', 
     widget=forms.TextInput(attrs={'size':100}) 
    ) 
    songs = forms.ModelMultipleChoiceField(
     label= 'Song Order', 
     required= False, 
     widget=forms.CheckboxSelectMultiple, 
     queryset= Song.objects.none() 
    ) 

puis,

ListEditForm.py

<form id="edit-form" method="post" action="/list/edit/"> 
<p> 
    {{ form.title.errors }} 
    {{ form.title.label_tag }} 
    {{ form.title }} 
</p> 
<p> 
    {% for song in form.songs %} 
     {{ song.label_tag }} 
     {{ song }} 
    {% endfor %} 
</p> 
<input type="submit" value="save" /> 
</form> 

Ce modèle génère l'erreur suivante: une exception Caught tout en rendant: objet « BoundField » est pas Iterable

Comment puis-je diviser le rendu de chaque champ de formulaire dans « form.songs »?

Répondre

2

Vous obtenez une erreur non itérative, car ListEditForm.songs est un champ unique contenant une liste de choix de morceaux, plutôt qu'une liste de champs de morceaux individuels. D'après votre description, je ne suis pas sûr de la façon dont vous vouliez que la liste soit rendue.

Je suggère d'examiner l'utilisation d'un formset Django. http://docs.djangoproject.com/en/dev/topics/forms/formsets/

+0

Merci pour votre réponse. Désolé pour mon anglais cassé. –

Questions connexes