【问题标题】:django multiple form separated in the html, merge again with submitdjango多个表单在html中分离,再次合并提交
【发布时间】:2022-01-29 02:58:19
【问题描述】:

有一个像这样的formmodel:

class foo(forms.ModelForm):
        a = forms.BooleanField(label='a', required=False)
        b = forms.BooleanField(label='b', required=False)
        c = forms.BooleanField(label='c', required=False)
        d = forms.BooleanField(label='d', required=False)
        e = forms.BooleanField(label='e', required=False)
        f = forms.BooleanField(label='f', required=False)
        g = forms.BooleanField(label='g', required=False)
        h = forms.BooleanField(label='h', required=False)
        #...

还有一个列表中有多个 foo 实例:

L = []
L.append(foo(instance=object_1))
L.append(foo(instance=object_2))
L.append(foo(instance=object_3))
#...
L.append(foo(instance=object_n))

这显示在 html 中不同列的不同表格中。 现在的问题是使用subbmit 正确地发回数据。我必须将表格和线条正确地重新组合在一起。我在想这样的事情:

<form class="form-inline" action ="{% url 'bla:blo' %}" method="post">
      Table #1
               | ID of Form | Value #1 | Value #2 | Value #3 | Value #4 |
               | ---------- | -------- | -------- | -------- | -------- |
    <form id=1>|     1      |    a1    |    b1    |    c1    |    d1    |</form>
    <form id=2>|     2      |    a2    |    b2    |    c2    |    d2    |</form>
    <form id=3>|     3      |    a3    |    b3    |    c3    |    d3    |</form>
    <form id=4>|     4      |    a4    |    b4    |    c4    |    d4    |</form>

      Table #2
               | ID of Form | Value #1 | Value #2 | Value #3 | Value #4 |
               | ---------- | -------- | -------- | -------- | -------- |
    <form id=1>|     1      |    e1    |    f1    |    g1    |    h1    |</form>
    <form id=2>|     2      |    e2    |    f2    |    g2    |    h2    |</form>
    <form id=3>|     3      |    e3    |    f3    |    g3    |    h3    |</form>
    <form id=4>|     4      |    e4    |    f4    |    g4    |    h4    |</form>

    {% csrf_token %}
    <button type="submit" class="btn btn-dark">Save</button>
</form>

即具有相同表单 id 的表的行必须转换回相同的 django 表单。

当然,提交必须仍然在view.py 中被接受 有点像

def boo(request):
    if request.method == 'POST':
        if form.is_valid():
            f = foo(request.POST):
            # f[0] = form id 1
            # f[1] = form id 2
            # f[2] = form id 3
            # ...
            # f[n] = form id n

【问题讨论】:

    标签: html django django-forms


    【解决方案1】:

    您只能通过上下文发送多个表单,但无法使用另一个包装表单获取所有这些表单数据。您只能看到表单列表,但您可能无法使用所有表单的发布请求获取数据。

    def boo(request):
        if request.method == 'GET':
           form_list = []
           object_list = [] # YOUR_OBJECT_LIST
           for instance in object_list:
               form_list.append(foo(instance=instance))
           return render("footemplate.html", context={"forms": form_list})
        if request.method == "POST":
           
    
    <form>
      {% csrf_token %}
      {% for form in forms %}
         {{ form }}
      {% endfor %}
    </form>
    
    

    要通过 post 请求发送所有表单数据,我建议使用 javascript 和 ajax。而对于后端部分,使用 RestfulAPI 来处理这个复杂的系统

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-10
      • 2014-06-13
      • 2017-12-24
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 2017-02-17
      相关资源
      最近更新 更多