在我的 django 应用程序中,我有一个页面,理论上用户可以在其中添加所需数量的地址。我有一个 django 地址表单,其中包含典型信息(地址、城市、邮政编码),用户可以根据需要创建任意数量的 django 表单,并且除了唯一的 id 之外,这些表单都是相同的。我的问题是,我需要用户能够单击提交按钮,该按钮会将所有表单提交到我可以处理地址的 View 。
类似问题的其他答案似乎对我不起作用,目前我的方法涉及循环遍历表单并在按下提交按钮时在每个表单上调用jquery的submit()函数,但该方法不起作用。理想情况下,我最终会在 View 中收到一个 POST 请求,其中包含所有表单中的所有地址信息,以便我可以在 View 中轻松处理它。
最佳答案
您可以通过以下方式使用带有前缀的 ModelForms 来解决此问题:
模型.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,
})
地址.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-
形式的前缀,这有助于 View 区分另一个元素并相应地保存它们。
您还可以有一个 jquery 函数来动态添加地址表单(记住还要增加 num_of_addresses 字段),它会完美地工作。
希望这有帮助
关于jquery - django:发送 POST 以从可能无限的表单中查看的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40208732/