就可以解決這個使用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字段),並且它可以很好地工作。
希望這會有幫助
你看了看formset?據我所見,他們正是你所需要的。 https://docs.djangoproject.com/en/1.10/topics/forms/formsets/ – Tim