2010-05-31 4 views
2

Hé les gars, je sais que cette question a été soulevée de nombreuses fois, mais je ne suis pas tout à fait l'implémentation complète. Comme vous pouvez le voir ci-dessous, j'ai un formulaire que je peux dire dynamiquement combien de lignes à créer. Comment puis-je créer un lien "Ajouter une ligne" qui indique à la vue combien de lignes créer? Je voudrais vraiment le faire sans augmenter l'url ...Ajouter dynamiquement des champs à Django (et proprement)

# views.py 
def myView(request): 
    if request.method == "POST": 
     form = MyForm(request.POST, num_rows=1) 

     if form.is_valid(): 
      return render_to_response('myform_result.html', context_instance=RequestContext(request)) 
    else: 
     form = MyForm(num_rows=1) 

    return render_to_response('myform.html', {'form':form}, context_instance=RequestContext(request)) 


# forms.py 
class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     num_rows = kwargs.pop('num_rows',1) 
     super(MyForm, self).__init__(*args, **kwargs) 

     for row in range(0, num_rows): 
      field = forms.CharField(label="Row") 
      self.fields[str(row)] = field 


# myform.html http://example.com/myform 
<form action="." method="POST" accept-charset="utf-8"> 
    <ul> 
     {% for field in form %} 
      <li style="margin-top:.25em"> 
       <span class="normal">{{ field.label }}</span> 
       {{ field }} 
       <span class="formError">{{ field.errors }}</span> 
      </li> 
     {% endfor %} 
    </ul> 
    <input type="submit" value="Save"> 
</form> 
<a href="ADD_ANOTHER_ROW?">+ Add Row</a> 

Répondre

11

Lorsque vous avez un formulaire avec un nombre variable de lignes, ce que vous avez besoin est un formset.

+0

Génial, je savais que c'était quelque chose que je n'avais probablement jamais eu auparavant. Merci de me diriger dans la bonne direction! En plus des formsets qui fonctionnent mieux que ce que je faisais, le 'ManagementForm' est la partie que je cherchais. – Scott

Questions connexes