'Django - How to filter queryset of model, using field two table away
I have three models:
class Classroom(models.Model):
classroom_subject = models.CharField(max_length=100)
classroom_code = models.CharField(max_length= 5, default = '00000')
teacher = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
student_name = models.CharField(max_length=100)
classes = models.ManyToManyField(Classroom, blank = True)
class WorkItem(models.Model):
classroom = models.ForeignKey(Classroom, on_delete=models.CASCADE)
work_description = models.CharField(max_length=500)
date_assigned = models.DateField(auto_now_add=True, blank=True)
time_assigned = models.TimeField(auto_now_add=True, blank=True)
submission = models.ForeignKey(UserUpload, null = True, on_delete=models.CASCADE)
I'm trying to return a queryset of WorkItem objects and filter the queryset through self.request.user.
The model WorkItem is related to Classroom, and classroom is related to student.
I have tried:
x = WorkItem.objects.filter(
classroom__student = self.request.user
)
Basically the problem is how to reference a field two tables away, because from WorkItem, I need to reference Classroom, then from Classroom I need to reference Student. I don't know how to do this. Thanks for reading my question, any help would be greatly appreciated :).
Solution 1:[1]
@iri has answered this question.
I had:
x = WorkItem.objects.filter(
classroom__student = self.request.user
)
The correct filter is:
x = WorkItem.objects.filter(
classroom__student__user = self.request.user
)
Using double underscore __ to join related tables, and can be used to reference multiple relationships in the models.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | calvincode123 |
