2010-04-15 53 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