Как получить две или более форм в функции в Django - PullRequest
0 голосов
/ 27 июня 2019

Как видно из названия, я работаю с двумя формами в шаблоне.

И мне было интересно, есть ли способ отправить две или более форм, чтобы сохранить их в функции.Потому что я не знаю, как я могу «определить» правильную форму, которую нужно сохранить.

Это две мои формы:

Форма 1 из экземпляра 'enterprise'

<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>

Форма 2 из экземпляра contactdata

<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 (), пропустив 1 обязательный позиционный аргумент: '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)

Если кто-нибудь может мне помочь, я ценю -

Спасибо!

1 Ответ

1 голос
/ 27 июня 2019

Просто создайте две формы (ниже псевдокод):

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 }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...