Как я могу получить всех участников курса, в которых есть 2 или более участников?
Вы можете использовать аннотирование для этого, и для этого будет проще, если вы добавите related_name в поле course_member элемента, например: course_member = models.ForeignKey(CourseMember, related_name='coursemember_member', on_delete=models.CASCADE)
, используя это related_name, вы можете сделать обратный поиск, чтобы ссылаться на дочернюю таблицу из родительской таблицы и аннотировать как это: CourseMember.objects.annotate(Count('coursemember_member')).filter(coursemember_member__count__gt=1)
это даст желаемый результат.
И как мне запретить CourseMember иметь более 1 участника.
Это может быть достигнуто на уровне ORM / Database или на уровне программы, чтобы достичь этого на уровне ORM, вы можете создать курс «член-один» вместо отношения «многие-к-одному», как это course_member = models.OneToOneField(CourseMember, on_delete=models.CASCADE)
здесь база данных выдает исключение если вы попытаетесь вставить несколько строк с одним и тем же course_member или иным образом на уровне программы, вы можете достичь этого, проверив, существует ли строка с тем же course_member, если она существует, обработайте ее.