Search code examples
djangoormmany-to-many

Django : get() returned more than one


I have trouble to get my data from DB.

Basically one teacher can create more no of class_room each class_room contains a title and it has more number of 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  )

When i try to execute this code. i get this error get() returned more than one

Then i removed get() bcoz the user has more number of class_room so i put filter() After that i get 'QuerySet'object has no attribute 'students'

Any help appreciated :(


Solution

  • You have multiple objects for model class_room in the database, with the same user. Either you need to enforce the uniqueness to the user attribute in the models.

    Or, you can get the students attribute of the first object in the query like,

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

    or using index,

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

    EDIT

    As per the request of OP, I think the required queryset would be,

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