2016-10-23 69 views
2

在我的django應用程序中,我有一個頁面,用戶在理論上可以根據需要添加任意數量的地址。我有一個包含典型信息(地址,城市,郵政編碼)的django地址表單,用戶可以根據自己的需要創建任意數量的django表單,並且表單除了唯一的id以外都是相同的。我的問題是,我需要用戶能夠點擊一個提交按鈕,將提交所有表單到一個視圖,我可以處理地址。django:正確的方式發送POST來查看潛在的無限形式

類似問題的其他答案似乎不適用於我,目前我的方法涉及到循環表單,並在按下提交按鈕時調用每個表單上的jquery的submit()函數,但該方法無效。理想情況下,我最終會在我的視圖中提供POST請求,並提供所有表單中的所有地址信息,以便我可以在視圖內輕鬆處理它。

+0

你看了看formset?據我所見,他們正是你所需要的。 https://docs.djangoproject.com/en/1.10/topics/forms/formsets/ – Tim

回答

0

就可以解決這個使用ModelForms用下列方式前綴:

models.py:

class Address(models.Model): 
    street = models.CharField(max_length=100) 
    city = models.CharField(max_length=100) 


class AddressForm(ModelForm): 
    class Meta: 
     model = Address 
     fields = ['street', 'city'] 

views.py:

def addresses(request): 

    if request.method == 'POST': 
     for i in range(int(request.POST['num_of_addresses'])): 
      address = AddressForm(request.POST, prefix='address%d'%i) 
      address.save() 
     return HttpResponse('Addresses saved successfully') 

    num_of_addresses = 10 # As many as you want 
    forms = [] 

    for i in range(num_of_addresses): 
     forms.append(AddressForm(prefix='address%d'%i)) 

    return render(request, 'address.html', context={ 
     'forms': forms, 
     'num_of_addresses': num_of_addresses, 
    }) 

address.html:

<form method="POST"> 
    {% csrf_token %} 
    {% for form in forms %} 
    {{ form }} 
    <br /> 
    {% endfor %} 
    <input type="hidden" name="num_of_addresses" value="{{ num_of_addresses }}" /> 
    <button type="submit">Submit</button> 
</form> 

如果你檢查生成的HTML,您會看到地址表單中的每個元素都會以addressN-的形式具有前綴,這樣可以幫助視圖告訴另一個並相應地保存它們。

你也可以有一個動態添加地址表單的jquery函數(記住還要增加num_of_addresses字段),並且它可以很好地工作。

希望這會有幫助

相關問題