2010-04-15 55 views
0

我正在嘗試生成一個包含許多地址(表單)的模板,您可以在其中添加,編輯和刪除它們。Django formsets問題

我在做一些與formset有關的錯誤嗎?下面是我的看法:

@login_required 
def addresses(request): 
    AddressesFormset = modelformset_factory(Address, 
              can_delete = True, 
              extra = 0, 
              exclude = ['user']) 

    log.debug('Queryset: %s', request.user.addresses.all()) 

    if request.method == 'POST': 
     log.debug('Formset from POST') 
     formset = AddressesFormset(request.POST) 
     if formset.is_valid(): 
      log.debug('Saving form') 
      formset.save() 
      log.debug('Fromset from queryset') 
      formset = AddressesFormset(queryset = request.user.addresses.all()) 
     else: 
      log.debug('Form is not valid') 
    else: 
     log.debug('Fromset from queryset') 
     formset = AddressesFormset(queryset = request.user.addresses.all()) 

    return render_to_response('accounts/addresses.html', locals(), context_instance = RequestContext(request)) 

@login_required 
def add_address(request): 
    address = Address.objects.create(user = request.user) 
    address.save() 
    return HttpResponseRedirect('/accounts/addresses/') 

而且模板:

{{ formset.management_form }} 
{% for form in formset.forms %} 
    <table class="accountT"> 
     <tr class="accountTT"> 
      <td><p>Ulica, nr domu, mieszkania:</p></td> 
      <td>{{ form.street.errors }}{{ form.street }}</td> 
     </tr> 
     <tr class="accountTT"> 
      <td><p>Miejscowość:</p></td> 
      <td>{{ form.city.errors }}{{ form.city }}</td> 
     </tr> 
     <tr class="accountTT"> 
      <td><p>Kod pocztowy:</p></td> 
      <td>{{ form.zipcode.errors }}{{ form.zipcode }}</td> 
     </tr> 
     <tr class="accountTT"> 
      <td><p>Telefon kontaktowy:</p></td> 
      <td>{{ form.phone.errors }}{{ form.phone }}</td> 
     </tr> 
     <tr> 
      <td><p>Usuń:</p></td> 
      <td>{{ form.DELETE }}</td> 
     </tr> 
     {{ form.id }} 
    </table> 
{% endfor %} 

編輯: 的問題是,添加的形式我要保存表單集(在add_address())。我想看看你如何正確對待formset。我根本不明白;)。

在此先感謝, Etam。

回答

0

那麼,你不要說你的問題是什麼,但是你至少做錯了一件事。

確認表單集是有效的,然後保存它,因爲某些原因,然後你實例另一表單集,並通過與render_to_response在函數結束直線下降,所以你最終顯示一組的空白後,再次形成。

你應該做的事情是在別的地方重定向,例如到確認頁面。

+0

我不是... 之前:formset = AddressesFormset(queryset = request.user.addresses.all()) 我這樣做:formset.save()。 沒有它你不能刪除表單:/。 – Etam 2010-04-15 20:20:43

+0

是的,這就是我所說的。您保存它,然後立即創建一個新的表單集。爲什麼? – 2010-04-15 20:44:53

+0

否則你不能從formset中刪除表單...我認爲我的理解框架集有些問題:(。 – Etam 2010-04-15 21:14:15