Получение списка запросов Django на основе другой таблицы
У меня есть следующие модели:
Групповая модель
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')
Модель курса
class Course(model.Model):
name = models.CharField(max_length=100)
Модель группового курса
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')
Модель курсового штаба
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')
Я хочу получить все GroupMember, которых нет в CourseStaff модели для определенного курса.
Например:
У меня всего 5 членов в Group A
- Член 1
- Член 2
- Член 3
- Член 4
- Член 5
У меня всего 2 курса в Group A
- Курс 1
- Курс 2
Course 1 имеет два члена:
- Член 1
- Член 2
Course 2 имеет два члена:
- Член 2
- Член 3
Я хочу получить Member 3-5 из GroupMember при запросе Course 1
Также получить Member 1,4, 5 из GroupMember при запросе Course 2
Как я могу это сделать?
Спасибо
"Я хочу получить все GroupMembers, которые не существуют в модели CourseStaff для определенного курса"
Ваши отношения между моделями слабые. Вы хотите исключить GroupMembers, в которых нет CourseStaff, но в GroupMembers нет связи с CourseStaff. Вы могли бы сделать это по полю Course в CourseStaff. Но ваша модель Course не имеет связи ни с одной моделью. Вам нужно добавить поле в модель Course, чтобы подключить связь.
Вот что я сделал. Возможно, это не идеально, но это работает.
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)