'Getting Django query list based on another table
I have models as below:
Group Model
class Group(model.Model):
name = models.CharField(max_length=100, null=True, blank=True)
GroupMember Model
class GroupMember(model.Model):
group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='group_member_group')
member = models.ForeignKey(User, on_delete=models.CASCADE, related_name='group_member_user')
Course Model
class Course(model.Model):
name = models.CharField(max_length=100)
GroupCourse Model
class GroupCourse(model.Model):
group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='course_group')
course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='group_course')
CourseStaff Model
class CourseStaff(model.Model):
course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='course_staff_course')
staff = models.ForeignKey(User, on_delete=models.CASCADE, related_name='course_staff_user')
What I want is to get All the GroupMembers that does not exists in CourseStaff model for a specific course.
For example:
I have total 5 members in Group A
- Member 1
- Member 2
- Member 3
- Member 4
- Member 5
I have total 2 course in Group A
- Course 1
- Course 2
Course 1 has two members:
- Member 1
- Member 2
Course 2 has two members:
- Member 2
- Member 3
What I want is to get Member 3-5 from GroupMember when querying for Course 1
Also get Member 1,4, 5 from GroupMember when querying for Course 2
How can I do that?
Thanks
Solution 1:[1]
"What I want is to get All the GroupMembers that does not exists in CourseStaff model for a specific course."
Your realtions between models are weak. You want to exclude GroupMembers that is no CourseStaff but in GroupMembers there is no relation with CourseStaff. You could do on course field of CourseStaff. But your Course model has no relation with any models. You need to add a field under the Course model to connect a relation.
Solution 2:[2]
This is what I did. It may not perfect, but it works.
course_staffs = CourseStaff.objects.filter(course_id=course_id).values_list('staff_id')
members = User.objects.filter(~Q(id__in=course_staffs), group_member_user__group_id=group_id)
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 | enes islam |
| Solution 2 | Nahidujjaman Hridoy |
