【问题标题】:change value form after press button (django)按下按钮后更改值形式(django)
【发布时间】:2019-11-12 09:20:07
【问题描述】:

我有一个表单,当我选择我的选项并按下“选择”按钮时,我需要用我选择的对象的数据更新表单。我的问题是,当我做我的静态对象时,{% for%} 已经标记了我一个错误,因为它不是一个列表。我不知道这是否是正确的做法。

这是运行 Mysql、django 1.11 和 python 2.7.15

views.py

def administrador(request):
    alumno = Alumnos.objects.all()
    mapa = mapas.objects.all()
    competencias = Competencias.objects.all()
    context = {
        'alumno': alumno,
        'mapa': mapa,
        'competencias': competencias
    }
    return render(request, 'competencias_app/competencias.html', context)

def seleccion(request):
    alumno = Alumnos.objects.get(pk=request.POST['Nombre'])
    context = {'alumno': alumno}
    return render(request, 'competencias_app/competencias.html', context)

competencias.html


 <form action="/seleccion" method="POST">
            {% csrf_token %}
            <div>
                <select id="carrera" name="Carrera">
                    <option value="1">TICS</option>
                    <option value="2">Carrera</option>
                    <option value="3">Carrera</option>
                    <option value="4">Carrera</option>
                    <option value="5">Carrera</option>
                </select>
            </div>

            <div>
                <select id="Alumno" name="Nombre">
                    {% for alumno in alumno %}
                    <option value="{{alumno.idAlumnos}}">{{alumno.nombre}}</option>
                    {% endfor %}
                    <input type="submit" name="Seleccionar">

                </select>
            </div>
            <label for="ID">ID</label>
            <input type="input" name="id" disabled value="{{alumno.idAlumnos}}"><br>
            <label for="apellidos">Apellidos</label>
            <input type="input" name="apellidos" disabled value="{{alumno.apellidos}}"><br>
            <label for="Correo">Correo</label>
            <input type="input" name="Correo" disabled value="{{alumno.correo}}"><br>

        </form>

按“seleccionar”时的输出是

请求方法:POST 请求网址:http://localhost:8000/seleccion Django 版本:1.11.21 异常类型:TypeError 异常值:
'Alumnos' 对象不可迭代

Images for more details

【问题讨论】:

  • alumno = Alumnos.objects.get(pk=request.POST['Nombre']) retun 单个对象或无。因此,您不需要迭代单个对象。
  • 正确,但在我的服务器中,错误是 {% for alumno in alumno %} 其中 alumno 未列出。
  • {% if alumno % }{% end if%} 放在&lt;select&gt;&lt;/select&gt; 框周围。另外,我不确定您是否可以执行for loop,其中迭代器与列表对象是相同的变量。

标签: html mysql django python-2.7


【解决方案1】:

我用一个 if 来解决我的问题,我不知道这是否是正确的解决方案,但有效!

competencias.html

 <form action="/seleccion" method="POST">
            {% csrf_token %}
            <div>
                <select id="carrera" name="Carrera">
                    <option value="1">TICS</option>
                    <option value="2">Carrera</option>
                    <option value="3">Carrera</option>
                    <option value="4">Carrera</option>
                    <option value="5">Carrera</option>
                </select>
            </div>

            <div>
                <select id="Alumno" name="Nombre">

                    {% if alumno|length > 1 %}
                    {% for alumno in alumno %}
                    <option value="{{alumno.idAlumnos}}">{{alumno.nombre}}</option>
                    {% endfor %}
                    {% else %}
                    <option value="{{alumno.idAlumnos}}">{{alumno.nombre}}</option>
                    {%endif%}

                    <input type="submit" name="Seleccionar">

                </select>
            </div>
            <label for="ID">ID</label>
            <input type="input" name="id" disabled value="{{alumno.idAlumnos}}"><br>
            <label for="apellidos">Apellidos</label>
            <input type="input" name="apellidos" disabled value="{{alumno.apellidos}}"><br>
            <label for="Correo">Correo</label>
            <input type="input" name="Correo" disabled value="{{alumno.correo}}"><br>

        </form>

views.py

def administrador(request):
    alumno = Alumnos.objects.all()
    mapa = mapas.objects.all()
    context = {
        'alumno': alumno
    }
    return render(request, 'competencias_app/competencias.html', context)

def seleccion(request):
     lstCompetencias = []
     alumno = Alumnos.objects.get(pk=request.POST['Nombre'])
     for p in Competencias.objects.raw('Select * from test_app_competencias where idmapasfk_id = %s', [request.POST['Nombre']]):
         lstCompetencias.append(p)
     context = { 
         'alumno' : alumno,
         'competencias' : lstCompetencias
        }

     return render(request, 'competencias_app/competencias.html', context)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 2018-01-05
    • 2020-04-20
    • 2015-10-01
    • 1970-01-01
    • 2014-10-20
    • 2019-01-01
    • 1970-01-01
    相关资源
    最近更新 更多