如何使用 django(查询)在我的 html 中显示更多对象

Posted

技术标签:

【中文标题】如何使用 django(查询)在我的 html 中显示更多对象【英文标题】:How to show more objects in my html with django (queries) 【发布时间】:2019-11-11 18:16:49 【问题描述】:

我想在我的 html 页面中显示更多查询,但它只显示一个对象。不知道怎么补充

这是在 mysql、html、django1.11 和 python 2.7.15 中

views.py

   def administrador(request):
    alumno = Alumnos.objects.get(pk=1)
    context =  'alumno': alumno 
    mapa = mapas.objects.get(pk=4)
    context2 =  'mapa' : mapa
    competencias = Competencias.objects.get(pk=1)
    context3 =  'competencias' : competencias
    return render(request, 'competencias_app/competencias.html',context)
<form action="/competencia" method="POST">
          % csrf_token %

            <div class="container-alumnos">
                <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">
                        <option value="alumno.idAlumnos">alumno.nombre</option>
                    </select> 
                </div>
                <form action="">
                    <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>

            </div>

            <select id="opciones" name="Semana">
                    <option value="1">Semana 1</option>
                    <option value="2">Semana 2</option>
                    <option value="3">Semana 3</option>
                    <option value="4">Semana 4</option>
                    <option value="5">Semana 5</option>
                </select>
            <div class="container-listas">

                <select name="OS" size=9>
                    <option selected value="0"> Elige una opción </option>
                        <optgroup label="mapa.nombre"> 
                        <option value="1">competencias.nombre</option> 
                        <option value="2">Nombre Competencia</option> 
                        <option value="3">Nombre Competencia</option> 
                    </optgroup> 
                    <optgroup label="Mapa - Nombre"> 
                        <option value="10">Nombre Competencia</option> 
                        <option value="11">Nombre Competencia</option> 
                        <option value="12">Nombre Competencia</option> 
                    </optgroup> 
                </select>

我需要添加对象映射和能力。对象校友我没有问题

【问题讨论】:

【参考方案1】:

.get() 返回单个对象。如果您想要所有对象,请尝试.all()

alumno = Alumnos.objects.all()
competencias = Competencias.objects.all()

.all() 返回查询集。在html中尝试这样

<select id="Alumno" name="Nombre">
% for alum in alumno %
     <option value="alum.idAlumnos">alum.nombre</option>
% endfor %
</select> 

【讨论】:

如果你放我对我有帮助,你在关闭 for you put % endif% 时会出错。我已经纠正了。但我还需要显示 Competencies 对象。【参考方案2】:

用户 filter 而不是 get。因为,get 返回单个对象,但 filter 返回所有匹配的对象。

def administrador(request):
    alumno = Alumnos.objects.filter(pk=1)
    mapa = mapas.objects.filter(pk=4)
    competencias = Competencias.objects.filter(pk=1)
    context = 
        'alumno': alumno,
        'mapa': mapa,
        'competencias': competencias
    
    return render(request, 'competencias_app/competencias.html', context)

在你的template

对于Alumnao

<select id="alumno" name="alumno">
% for item in alumno %
     <option value="item.id">item.your_desired_field</option>
% endfor %
</select> 

对于mapa

<select id="mapa" name="mapa">
% for item in mapa %
     <option value="item.id">item.your_desired_field</option>
% endfor %
</select> 

对于competencias

<select id="competencias" name="competencias">
% for item in competencias %
     <option value="item.id">item.your_desired_field</option>
% endfor %
</select> 

【讨论】:

当您使用pk 过滤时,.filter(pk=1) 不可能返回多个对象。如果条件不满足,则返回空QuerySet[]。因此,如果您想通过pk 或任何唯一列值获取对象,那么您应该使用get()get_object_or_404() 你说得对,但具体应该怎么做取决于需求。

以上是关于如何使用 django(查询)在我的 html 中显示更多对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GeoIP2() django 模型从 IP 地址调用中提取保存的信息以显示在我的 html 中

如何禁用 Django 查询缓存?

如何在我的 Django 500.html 页面中包含堆栈跟踪?

如何在w / django中获取类别内的项目数?

如何使用 Django 在 HTML 按钮上执行 file.py?

在 Django 中,如何使用模板和 DB 对象中使用的动态 URL 实现样板 HTML 变量?