Django:get()返回多个

时间:2017-08-06 12:43:44

标签: django orm many-to-many

我无法从数据库中获取数据。

基本上,一位教师可以创建更多的class_room个,每个class_room包含title,而且students的数量更多。

models.py

class class_room(models.model):
    user = models.ForeignKey(User,related_name = 'classroom')
    title = models.charField(max_length=50)
    students = models.ManyToManyField(User,related_name= 'commits',symmetrical=FAlSE)

views.py

def index(request):
    user = request.user
    Total_class = class_room.objects.get(user = user)
    students_list = Total_class.students.all()
    class_name = Total_class.title.all()
    return render(request,'trial/index.html,{'Total':Total_class ,'no':students_list, 'class_name ':class_name  )

当我尝试执行此代码时。我收到此错误 get()返回多个

然后我删除 get() bcoz用户有更多的class_room,所以我把 filter()之后我得到'QuerySet '对象没有属性'学生'

任何帮助表示赞赏:(

1 个答案:

答案 0 :(得分:2)

数据库中有多个模型class_room的对象,具有相同的user。您需要强制模型中user属性的唯一性。

或者,您可以在查询中获取第一个对象的students属性,如

Total_class = class_room.objects.filter(user = user).first()
students_list = Total_class.students.all()

或使用索引

Total_class = class_room.objects.filter(user = user)[2] 
                                                    #any element.

修改

根据OP的要求,我认为所需的查询集将是,

student_list = User.objects.filter(class_room__user=request.user)