python - 无法在 django ''function' 对象中调用对象方法没有属性 'objects'”
问题描述
我试图显示来自 django 的一些对象。当我使用管理员时,我的对象被创建,但是当我尝试显示它是不可能的。
我尝试进行渲染,但是当我初始化屏幕时从未调用过,然后我尝试使用 GET 按钮进行渲染,现在调用了该函数,但是当到达 alumnos = Alumno.objects.all() 时会抛出“函数”对象没有属性“对象”。
模型.py
class Alumno(models.Model):
dni = models.CharField(max_length=9,primary_key=True)
nombre = models.CharField(max_length=100)
apellido1 = models.CharField('Primer apellido',max_length=50)
apellido2 = models.CharField('Segundo apellido',max_length=50)
email = models.EmailField("Correo electronico",null=True)
repetidor = models.BooleanField()
curs = models.ManyToManyField(Curso, blank=True, related_name="Historico_de_cursos")
Nivel = models.ManyToManyField('Nivel', through = 'Completado',through_fields=('Alumno','Nivel'))
Practica = models.ManyToManyField('Practica', through = 'Nota',through_fields=('Alumno','Practica'))
Curso = models.ManyToManyField('Curso',through = 'Curso_alumno',through_fields=('Alumno','Curso'))
objects = models.Manager()
def __str__(self):
return self.dni
class Meta:
db_table = "Alumno"
verbose_name = 'Alumno'
verbose_name_plural = 'Alumnos'
unique_together = ("nombre", "apellido1", "apellido2")
视图.py
def mostrar_alumnos(request):
alumnos = Alumno.objects.all()
return render(request, 'mostrar_alumnos.html', {'alumnos': alumnos}
mostrar_alumnos.html
{% if alumnos %}
<ul>
{% for alumno in alumnos %}
<td>{{ alumno.dni }}</td>
<td>{{ alumno.nombre }}</td>
<td>{{ alumno.apellido1 }}</td>
<td>
<a class="btn btn-secondary" href="{% url 'actualizar_alumno' alumno.dni %}"> Editar</a>
<a class="btn btn-danger" href="{% url 'eliminar_alumno' alumno.dni %}"> Esborrar</a> </td>
{% endfor %}
</ul>
{% else %}
<p>No hay alumnos disponibles.</p>
{% endif %}
网址.py
url(r'^mostrar_alumnos/$', TemplateView.as_view(template_name='mostrar_alumnos.html'),name='mostrar_alumnos'),
url(r'^mostrar_alumnos/$', views.mostrar_alumnos,name='mostrar_alumnos'),
url(r'^mostrar_alumnos2/$', views.mostrar_alumnos2,name='mostrar_alumnos2')
解决方案
根据错误消息和您的评论,您构建了一个名为 的视图函数Alumno
,如下所示:
# app/views.py
from app.models import Alumno
def Alumno(request):
# ...
pass
def mostrar_alumnos(request):
alumnos = Alumno.objects.all()
return render(request, 'mostrar_alumnos.html', {'Alumno': alumnos})
这意味着如果您编写Alumno.objects
,您指的是Alumno
function,即使您导入了模型,因为您只是在Alumno
定义该函数时为其设置了标识符。
解决此问题的最简单方法是将Alumno
视图重命名为alumno
,这是根据PEP-8推荐的命名函数的方法。在这种情况下,Alumno
将参考您的导入模型。
# app/views.py
from app.models import Alumno
def alumno(request):
# ...
pass
def mostrar_alumnos(request):
alumnos = Alumno.objects.all()
return render(request, 'mostrar_alumnos.html', {'alumnos': alumnos})
模板变量的名称可能应该是,'alumnos'
而不是Alumno
,然后在您的模板中,您可以使用以下方式呈现它:
{% if alumnos %}
<ul>
{% for alumno in alumnos %}
<td>{{ Alumno.dni }}</td>
<td>{{ Alumno.nombre }}</td>
<td>{{ Alumno.apellido1 }}</td>
<td>
<a class="btn btn-secondary" href="{% url 'actualizar_alumno' alumno.dni %}"> Editar</a>
<a class="btn btn-danger" href="{% url 'eliminar_alumno' alumno.dni %}"> Esborrar</a> </td>
{% endfor %}
</ul>
{% endif %}
请注意,您不必objects = models.Manager()
在模型中定义 an。如果你不指定另一个经理,Django 会自动添加一个为其命名的经理objects
。
推荐阅读
- javascript - 农业网格中的可编辑组单元格
- javascript - 类型检查在常规 JS-File 中的 VSCode 中引发错误
- javascript - 从 core-js/regenerator-runtime 的直接导入迁移到完全“自动”的 Babel 配置?
- windows - 命令行 vs 命令提示符 vs 终端?贝壳?
- reactjs - 如何在 React.js 中动态选择/取消选择复选框
- delphi - IntraWeb 应用程序在将文件作为附件发送到浏览器时锁定
- ubuntu - Linux crontab 不复制文件
- javascript - 将 PHP Doctrine 日期转换为 JS
- ios - splitViewController(_:collapseSecondary:onto:) 没有被调用
- web-applications - PWA 或 Web App 能否在离线环境(无互联网连接)中将自身共享到另一部手机?