Как правильно использовать виджет FilteredSelectMultiple с кросс-таблицами в Django Forms?

Итак, у меня есть очень базовая модель

class Student(models.Model):
id = models.AutoField(primary_key=True)
first_name=models.CharField(max_length=50)
last_name=models.CharField(max_length=50)
...

class Course(models.Model):
id = models.AutoField(primary_key=True)
course=models.CharField(max_length=50)
description=models.CharField(max_length=50,null=True,default=None,blank=True)
...

class StudentInCourse(models.Model):
StudentId = models.ForeignKey(Student, on_delete=models.CASCADE)
CourseId = models.ForeignKey(Course, on_delete=models.CASCADE)

def __str__(self):
    return str(Student.objects.get(id=self.StudentId.id)) + " in " +   str(Course.objects.get(id=self.CourseId.id))

Я хочу использовать виджет со страницы администратора для добавления пользователей в группу. Я уже выяснил, что FilteredSelectMultiple, но у меня нет идеи, как объявить правильную форму или получить course_id из формы, чтобы выбрать только тех, кто еще не назначен на курс в левой части виджета и заполнить правую часть виджета студентами, которые уже назначены. Кто-нибудь может направить меня в нужное русло?

Вот часть остального кода, я уже начал, но он неправильный, очевидно

Формы :

class StudentToCourseForm(forms.Form):

   def __init__(self, course_id, *args, **kwargs):
    super(StudentToCourseForm, self).__init__(*args, **kwargs)
    self.choosen_students = forms.ModelMultipleChoiceField(queryset=Student.objects.filter(id=StudentInCourse.objects.filter(CourseId=course_id).values("StudentId")),
                                                      label="Something",
                                                      widget=FilteredSelectMultiple("Title", is_stacked=False),
                                                      required=True)

    class Media:
        css = {
            'all': ('/static/admin/css/widgets.css',),
        }
        js = ('/admin/jsi18n',)

    def clean_drg_choise(self):
        choosen_students = self.cleaned_data['choosen_students']
        return choosen_students

Просмотров:

    @login_required
def student_to_course(request,id=None):
    if request.method == 'POST':
        form = StudentToCourseForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('student_management')
    else:
        form = StudentToCourseForm(id)
    return render(request,
                  'students/student_to_course.html',
                  {
                      'form': form
                  })

Шаблон:

    <div class="modal-header">
    <h2>Add new {{id}}</h2>
</div>
<div class="modal-body" >
 <script type="text/javascript" src="{% url 'jsi18n' %}" > </script>

  {{ form.media }}

  <form enctype="multipart/form-data" method="POST">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit" class="save btn btn-default">Submit</button>
  </form>
</div>
<div class="modal-footer">
    </div>

И виджет, который я хотел бы использовать, для демонстрации :

введите описание изображения здесь

Вернуться на верх