How to write a query for student who logged in(student = self.request.user.id
) to view his assignments titles (belong to his
intake)
class intake(models.Model):
intakecode = models.CharField(max_length=100)
modules = models.ManyToManyField(Module, through='IntakeDetails')
class Student(models.Model):
user = models.OneToOneField(UserType, on_delete=models.CASCADE,
primary_key=True)
intakecode = models.ForeignKey(intake, on_delete=models.CASCADE)
student belong to a intake and each intake many modules.
class IntakeDetails(models.Model):
intake = models.ForeignKey(intake, on_delete=models.CASCADE)
lecturer = models.ForeignKey(Lecturer, on_delete=models.CASCADE)
module= models.ForeignKey(Module, on_delete=models.CASCADE)
class AssignAssignment(models.Model):
title=models.CharField(max_length=30)
duedate=models.DateField()
intakedetails=models.ForeignKey(IntakeDetails,on_delete=models.CASCADE,null=True)
I tried this one but if there are more than one intakedetails
, however, it pops up an error.
@login_required
class ModelIndexView(ListView):
template_name= 'accounts/students/students.html'
context_object_name= 'students'
def get_queryset(self):
student = self.request.user.id
student_det = Student.objects.get(user_id=student)
assignment=IntakeDetails.objects.get(intake_id=student_det.intakecode)
queryset=AssignAssignment.objects.filter(intakedetails_id=assignment.id)
return queryset
Because when you use objects.get
there should be only one row matching your query. No row or multiple rows result in errors --ObjectDoesNotExist
and MultipleObjectsReturned
respectively.
You may use this query to get your desired result:
AssignAssignment.objects.filter(intakedetails__intake_id=Student.objects.get(user_id=student).intakecode)