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

Posted

技术标签:

【中文标题】django:发送 POST 以从可能无限的表单中查看的正确方法【英文标题】:django: proper way to send POST to view from potentially unlimited forms 【发布时间】:2017-03-05 15:49:01 【问题描述】:

在我的 django 应用程序中,我有一个页面,理论上用户可以添加任意数量的地址。我有一个包含典型信息(地址、城市、邮政编码)的 django 地址表单,用户可以根据需要创建任意数量的这些 django 表单,并且这些表单除了唯一的 ID 之外都是相同的。我的问题是我需要用户能够单击提交按钮,该按钮会将所有表单提交到我可以处理地址的视图。

类似问题的其他答案似乎对我不起作用,目前我的方法涉及遍历表单并在按下提交按钮时在每个表单上调用 jquery 的 submit() 函数,但这种方法不起作用。理想情况下,我最终会在我的视图中收到一个 POST 请求,其中包含来自所有表单的所有地址信息,以便我可以在视图中轻松处理它。

【问题讨论】:

您研究过表单集吗?据我所知,他们完全符合您的需要。 docs.djangoproject.com/en/1.10/topics/forms/formsets 【参考方案1】:

您可以通过以下方式使用带有前缀的 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,
    )

地址.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 字段),它会完美地工作。

希望对你有帮助

【讨论】:

以上是关于django:发送 POST 以从可能无限的表单中查看的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 JQUERY UI 向 Django 发送 POST 数据

Django:Disabled Dropdown 不会将信息发送回 POST

无法在 django 视图中从 POST 检索数据

在 django 中更新表单数据

Django 表单中的有序列表表单值

Django第3章: Form表单