jquery - django:发送 POST 以从可能无限的表单中查看的正确方法

标签 jquery python django forms django-forms

在我的 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/

相关文章:

jquery - 将视口(viewport)可见性与 DrawSVG 相结合

python - 如何通过python从一个xml中提取部分到多个xml

python - 如何查询数据库以获得一个列表,其中每个值是具有相同日期值的记录数之和?

python - 如何在django中调用 View 文件中的模型函数

javascript - 地理定位API : how to know if the user clicked on close or block button

JavaScript 模板(下划线)

python - 使用 "user-agent"字符串时,使用 urllib 读取沃尔玛产品页面不起作用

python - 具有百万行的 Django 表

javascript - JS在生成的ajax div中添加文本

python - 在 asyncio.ensure_future 中捕获错误