2010-05-31 4 views
2

Эй, ребята, я знаю, что этот вопрос неоднократно поднимался, но я не совсем понял его. Как вы можете видеть ниже, у меня есть форма, которую я могу динамически рассказать, сколько строк нужно создать. Как создать ссылку «Добавить строку», которая указывает, сколько строк нужно создать? я действительно хотел бы сделать это без увеличения URL-адреса ...Добавление полей в Django динамически (и чисто)

# 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> 

ответ

11

Когда у вас есть форма с переменным числом строк, что вам нужно, это formset.

+0

Удивительный, я знал, что это то, чем я, вероятно, раньше не занимался. Спасибо, что помогли мне в правильном направлении! Помимо форм, работающих лучше, чем то, что я делал, «ManagementForm» - это та часть, которую я искал. – Scott

Смежные вопросы