Python 使用动态对象过滤器
我正在尝试访问所有分数为100的学生的姓名Python 使用动态对象过滤器,python,django,Python,Django,我正在尝试访问所有分数为100的学生的姓名 def get_names(request): students = Result.objects.filter(marks=100) student_name = [] for x in students: student_name.append(x.student) for x in student_name: print (x.name) return render(requ
def get_names(request):
students = Result.objects.filter(marks=100)
student_name = []
for x in students:
student_name.append(x.student)
for x in student_name:
print (x.name)
return render(request, 'exam/index.html', {'names': student_name})
当我运行此视图时,“Student has no attribute”\uuuu getitem\uuuuuuuuuuu“显示在打印行(x.name)上。
我读了一些关于动态对象过滤器的内容,但在本例中无法理解
模型结构
class Student(models.Model):
name = models.CharField(max_length=20)
stream = models.CharField(max_length=20)
class Result(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
marks = models.IntegerField()
如果你想打印学生的名字
for x in students:
print(x.student.name)
student_name.append(x.student)
如果您使用了更多信息丰富的变量名,而不是似乎不厌其烦地提出令人困惑的变量名,那么您将受益匪浅。在代码段中:
def get_names(request):
results = Result.objects.filter(marks=100)
students = []
for result in results:
students.append(result.student)
for student in students:
print(student.name)
return render(request, 'exam/index.html', {'names': student_name})
也就是说,我不明白你的学生没有属性“\uuu getitem\uuuu”
是从哪里来的,也不明白为什么要打印它而不引发异常\uuuu getitem\uuuu
用于访问具有整数键或切片键的序列项,而您似乎在任何地方都没有这样做。根据您在这里介绍的模型,x
(或我的代码中的student
)应该是student
实例,并且执行print(x.name)
应该可以
在任何情况下,您都可以用一种更简单的方式:
def get_names(request)
students = Student.objects.filter(result__marks=100).distinct()
return render(request, 'exam/index.html', {'students': students})
然后您可以在模板中迭代
student
,并访问student.name
。如果只想将名称列表传递给模板,可以在查询中使用values\u list('name',flat=True)
。我的主要目标是将名称列表传递给网页。但是,当发生上述错误时,我添加了几行额外的代码,以便在Python控制台上打印列表。谢谢我将修改变量名。谢谢你的建议