Python Django-无法从模型访问数据
我目前正在使用Django3.2,当我试图在视图中打印模型数据时,它会抛出以下错误Python Django-无法从模型访问数据,python,django,Python,Django,我目前正在使用Django3.2,当我试图在视图中打印模型数据时,它会抛出以下错误 AttributeError at / 'QuerySet' object has no attribute 'Name' 我的观点是这样的 from django.shortcuts import render, HttpResponse, redirect from django.contrib.auth.decorators import login_required from user.models i
AttributeError at /
'QuerySet' object has no attribute 'Name'
我的观点是这样的
from django.shortcuts import render, HttpResponse, redirect
from django.contrib.auth.decorators import login_required
from user.models import Student
@login_required
def home(request):
user = request.user
student_user = Student.objects.all()
student_users = []
for user in student_user:
student_users.append(user.User.username)
stu_user = request.user.username
student_list_set = set(student_users)
if stu_user in student_list_set:
data = Student.objects.filter(User=request.user)
print(data.Name)
params = {
'data':student,
}
return render(request, 'dashboard/student/dashboard.html', params)
class Student(models.Model):
User = models.ForeignKey(User, on_delete=models.CASCADE)
Name = models.CharField(max_length=50)
Profile = models.ImageField(upload_to = upload_student_profile_to, default =
'defaults/student_profile.png')
class_choices = (('1','1'), ('2','2'), ('3','3'), ('4','4'),('5','5'),('6','6'),('7','7'),('8','8'),
('9','9'),('10','10'))
Class = models.CharField(max_length=100, choices=class_choices)
section_choices = (('A','A'),('B','B'),('C','C'),('D','D'),('E','E'))
Section = models.CharField(max_length=100, choices=section_choices)
Roll = models.IntegerField(blank=True)
Number = models.IntegerField(blank=True)
is_banned = models.BooleanField(default=False)
def __str__(self):
return self.Name + " of " + self.Class
当我尝试打印数据时,请打印data.name。它抛出以下错误
AttributeError at /
'QuerySet' object has no attribute 'Name'
我的models.py文件如下所示
from django.shortcuts import render, HttpResponse, redirect
from django.contrib.auth.decorators import login_required
from user.models import Student
@login_required
def home(request):
user = request.user
student_user = Student.objects.all()
student_users = []
for user in student_user:
student_users.append(user.User.username)
stu_user = request.user.username
student_list_set = set(student_users)
if stu_user in student_list_set:
data = Student.objects.filter(User=request.user)
print(data.Name)
params = {
'data':student,
}
return render(request, 'dashboard/student/dashboard.html', params)
class Student(models.Model):
User = models.ForeignKey(User, on_delete=models.CASCADE)
Name = models.CharField(max_length=50)
Profile = models.ImageField(upload_to = upload_student_profile_to, default =
'defaults/student_profile.png')
class_choices = (('1','1'), ('2','2'), ('3','3'), ('4','4'),('5','5'),('6','6'),('7','7'),('8','8'),
('9','9'),('10','10'))
Class = models.CharField(max_length=100, choices=class_choices)
section_choices = (('A','A'),('B','B'),('C','C'),('D','D'),('E','E'))
Section = models.CharField(max_length=100, choices=section_choices)
Roll = models.IntegerField(blank=True)
Number = models.IntegerField(blank=True)
is_banned = models.BooleanField(default=False)
def __str__(self):
return self.Name + " of " + self.Class
数据变量是queryset,而不是Student对象,所以您应该像访问列表一样访问它 如果你确定
data = Student.objects.filter(User=request.user)
返回一个可以这样打印的元素:
print(data[0].Name)
如果每个用户只能存在一个学生,则更简单的方法如下:
print(data[0].Name)
student=student.objects.get(User=request.User)
打印(学生姓名)
检查以了解何时使用.get()
以及何时使用.filter()