Получение списка запросов 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)
Вернуться на верх