Как правильно использовать виджет 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>
И виджет, который я хотел бы использовать, для демонстрации :
введите описание изображения здесь