【问题标题】:Django - Not able to access the data from modelDjango - 无法从模型访问数据
【发布时间】:2021-05-20 10:35:08
【问题描述】:

我目前正在使用 django 3.2,当我尝试在视图中打印模型数据时,它会引发以下错误

我的观点是这样的

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)

当我尝试打印 data.name 时。它抛出以下错误

AttributeError at /
'QuerySet' object has no attribute 'Name'

我的 models.py 文件如下所示

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    data 变量是一个查询集,而不是 Student 对象,因此您应该像列表一样访问。

    如果你确定

    data =  Student.objects.filter(User=request.user)
    

    返回一个你可以像这样打印的元素:

    print(data[0].Name)
    

    【讨论】:

      【解决方案2】:

      如果每个用户只能存在一个学生,那么更简单的方法是这样的:

      student = Student.objects.get(User=request.user)
      print(student.name)
      

      检查this post 以了解何时使用.get() 以及何时使用.filter()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-20
        • 1970-01-01
        • 2011-04-23
        • 2017-05-04
        • 1970-01-01
        • 2015-08-27
        • 2022-01-15
        • 2020-06-06
        相关资源
        最近更新 更多