【问题标题】:How to receive two or more forms in a function in django如何在django的一个函数中接收两个或多个表单
【发布时间】:2019-06-27 03:29:56
【问题描述】:

正如标题所说,我正在使用模板中的两个表单。

我想知道是否有办法发送两个或多个表单以将其保存到函数中。因为我不知道如何“检测”必须保存的正确表单。

这是我的两种形式:

来自“企业”实例的表格 1

<form method="POST" action='' enctype="multipart/form-data">
        {% csrf_token %}
          <h4><strong>Datos de empresa:</strong></h4>
          <!--Foto del miembro de equipo-->
          <h6><strong>Subir logo:</strong></h6>
          <input type="file" name="image_path">

              <!--Full name-->
                <div class="form-group row">

                  <div class="col-sm-6 mb-3 mb-sm-0">
                    <strong>Nombre de empresa:</strong>
                  </div>
                  <div class="col-sm-6 mb-3 mb-sm-0">
                    <strong>Número de teléfono:</strong>
                  </div>
                  <div class="col-sm-6 mb-3 mb-sm-0">
                    <input class= "form-control" type="text" name="name" maxlength="20"  value="{{enterprise.name}}">
                  </div>
                  <div class="col-sm-6">
                      <input class= "form-control" type="tel" pattern="[0-9]{4}-[0-9]{3}-[0-9]{4}" name="phone_number" value="{{enterprise.phone_number}}">
                  </div>
                </div>

        <!--Username and email is same in this case-->
                <strong>Correo electrónico:</strong>
                <div class="form-group">
                  <input class= "form-control" type="email" name="email" value="{{enterprise.email}}" >
                </div>

        <!--Date of birth-->
                <strong>Fecha de fundación:</strong>
                <div class="form-group">
                  <input class= "form-control" type="date" name="date" value="{{enterprise.date}}" >
                </div>

        <!--Direction-->
                <strong>Dirección:</strong>
                <div class="form-group">
                  <textarea class= "form-control"  rows="6" name="direction" 
                  value="{{enterprise.direction}}">{{enterprise.direction}}</textarea>
                </div>

        <!--Description-->
                <strong>Descripción de empresa:</strong>
                <div class="form-group">
                  <textarea  class="form-control" rows="6" type="text" name="description" value="{{enterprise.description}}">{{enterprise.description}}</textarea>
                </div>

        <!--Employees-->
                <strong>Número de empleados (aproximado):</strong>
                <div class="form-group">
                  <input class= "form-control" type="number" name="employees" min=1 value="{{enterprise.employees}}">
                </div>

        <!--Button-->
            <hr>
              <button class="btn btn-primary " type="submit">Guardar cambios</button>
      </form>

来自“contactdata”实例的表格 2

<form method="post" action='' enctype="multipart/form-data">
                                {% csrf_token %}
                                <div class="row">
                                    <div class="col-sm-8">
                                          <div class="form-group">
                                            Define cuál es tu visión y objetivo:
                                            <textarea class= "form-control" rows="6" type="text" name="vision" placeholder=""></textarea>
                                          </div>
                                        </div>
                                        <div class="col-sm-4 ">
                                      <img src="{% static 'img/meta-300x300.jpg'%}" alt="" width="210px" height="210px">
                                    </div>
                                  </div>
                                  <div class="row">
                                    <div class="col-sm-12">
                                      <div class="form-group">
                                        ¿Cuál es tu horario de atención al cliente?
                                          <input class= "form-control" type="text" name="vision" placeholder="Ejemplo: Lunes a viernes de 7:30am a 6:00pm.">
                                        </div>
                                      </div>
                                    </div>
                                    <div class="row">
                                    <div class="col-sm-6">
                                          <div class="form-group">
                                            <img src="{% static 'img/750x450.png'%}" alt="" width="300px" height="200px">
                                              <strong><p>Resolución recomendada: 750x450px.</p></strong>
                                            <input type="file" name="vision">
                                          </div>
                                        </div>
                                        <div class="col-sm-6">
                                          <h5><strong>Foto de cabecera:</strong></h5>
                                      <h7>¡Anímate a subir una foto de cabecera!, al hacerlo transmites mayor confianza a los usuarios, puede ser una foto de tu equipo, lugar de tu trabajo, logotipo o alguna foto de portada que vaya de acuerdo con lo que ofrezcas.</h7>
                                    </div>
                                  </div>
                                    <button class="btn btn-primary " type="submit">Guardar cambios</button>
                                    </form>

如您所见,这是模板中的两个表单。

我尝试这样做,但是当我尝试保存其中一种表单时,我收到错误 full_clean() missing 1 required positional argument: 'self'...

错误具体在这一行

if form.is_valid() and form2.is_valid():

当我尝试验证这两种形式时..

def edit_design(request):
clean_designs()
contact = contactData.objects.get(id=0)
temp = Templates.objects.get(temp_selected=True)
enterprise = enterprisedata.objects.get(id=0)
members = teamMembers.objects.filter(existencia=True)
design = Available_design_page(isSelected=True)
if request.method == 'GET':
    form = EnterpriseForm(instance=enterprise)
    form2 = ContactForm(instance=contactData)
else:
    form = EnterpriseForm(request.POST, instance=enterprise)
    form2 = ContactForm(request.POST, instance=contactData)
    if form.is_valid() and form2.is_valid():
        form.save()
        form2.save()
        return redirect('adminview:save_page')
    else:
        diccionario=request.POST
        print('es invalido: ', diccionario)
    return redirect('adminview:edit_design')
contexto = {'form':form,
            'form2':form2,
            'members':members,
            'design':design,
            'enterprise':enterprise,
            'contact':contact,
            }
return render(request, 'adminview/edit_design.html', contexto)

如果有人可以帮助我,我将不胜感激-

谢谢!

【问题讨论】:

    标签: python html django forms


    【解决方案1】:

    只需创建两个表单(以下是伪代码):

    if request.method == 'GET':
        form1 = EnterpriseForm(instance=enterprise)
        form2 = OtherForm(#initialize as you need to)
    else:
        form1 = EnterpriseForm(request.POST, instance=enterprise)
        form2 = OtherForm(request.POST, instance=#whatever)
    
    if form1.is_valid() and form2.is_valid():
       form1.save()
       form2.save()
       #do other things
    
    context = {'form1': form1,
              'form2': form2,
              #etc
    

    在您的模板中,您需要确保同时显示它们,例如

    {{ form1.as_p }}
    {{ form2.as_p }}
    

    【讨论】:

    • 感谢您的回复,我正在避免使用像 form.as_p 这样的通用形式。我尝试像您一样放置函数,但我收到错误“full_clean() missing 1 required positional argument : 'self',当我尝试保存 form1 时
    • 如果没有看到代码、模板和完整的错误,真的不能说太多。尝试使用调试器和/或 python env 处理您的表单并将测试数据(和打印输出)传递到您的视图和表单中。
    • 从您上面的模板来看,您的表单操作似乎没有设置。我的通常有视图的 url,例如:
    • 好的,我编辑了这个问题。如你所见,我做了你告诉我的事。我收到错误 full_clean() missing 1 required positional argument: 'self' 当我尝试保存表单时,请检查它,希望你能帮助我:)
    • 有几件事:1)您使用的是企业数据(企业)的实例,但是初始化表单时的contactData模型,以及2)我相信POST中的表单检索应该只是从 request.POST 初始化,而不是 request.POST 和初始实例(EnterpriseForm(request.POST),not EnterpriseForm(request.POST, instance=enterprise ) ).
    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 2021-02-22
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多