Присвоение объектов отношениям "многие-ко-многим" - Django

У меня есть проект django, где у меня есть список с флажками, чтобы выбрать и назначить студентов преподавателям. Я прикрепил свой код ниже - я не получаю ошибок, но, похоже, он не назначает студента в поле "students" many-to-many в моей модели "teachers".

У меня есть функция GET, которая вызывается ранее для выбора учителя, затем она должна извлечь эту запись GET и назначить ученика этому учителю.

Есть идеи?

Views.py

        if 'assign_student' in request.POST:
            form = StudentForm(request.POST)
            selected = request.GET['select_teacher']
            selected_teacher = Teacher.objects.all().filter(pk=selected)[0]
            if form.is_valid():
                student_selected = request.POST('assign_student')
                student = Student.objects.all().filter(pk=student_selected)[0]
                selected_teacher.students.add(*student)

Template.html

    <div class="student-list">       
        {% for instance in all_students %}
        <div class="input-group" style="border-bottom: 1px solid;">
            <div class="item-details">
                <div class="form-check">
                    <form method="POST" class="form-group" name="assign_student">
                    {% csrf_token %}
                        <input onChange="this.form.submit()" class="form-check-input" type="checkbox" value={{ instance.pk }} id="flexCheckDefault" name="assign_student">
                    </form>
                    <p>
                        <b>{{ instance.fullname }}</b>
                        <br>
                        {{ instance.homeschool }} - {{ instance.schoolclass }} Class
                    </p>
                </div>
            </div>
        </div>
        {% endfor %}
    </div>

Причина, по которой он не работает, заключается в том, что вы используете запросы с помощью фильтров и т.д. Таким образом, вам возвращается набор запросов вместо объекта. Вместо этого вам следует использовать get_object_or_404().

Кроме того, вы сохраняете данные для сессии, а не в базе данных. Вы должны использовать students.save() для сохранения в БД.

Вы можете сделать что-то вроде этого

from django.shortcuts import get_object_or_404

        if 'assign_student' in request.POST:
            form = StudentForm(request.POST)
            selected = request.GET['select_teacher']
            selected_teacher = get_object_or_404(Teacher, pk=selected)
            if form.is_valid():
                student_selected = request.POST('assign_student')
                student = get_object_or_404(Student, pk=student_selected)
                selected_teacher.students.add(student)
                selected_teacher.save() #saving the teacher model object
                selected_teacher.students.save() #saving the student model object

Ах я глупый!

Я исправил это, я пытался получить "if form.is_valid()", когда я не размещаю полную форму - удалил это и все работает сейчас.

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