Как обрабатывать несколько объектов одновременно в файле views.py
Я делаю функцию, которая добавляет имя текущего пользователя, установив флажок в последнем столбце каждой строки и нажав кнопку "Добавить преподавателя".
Приведенный ниже код работает, когда установлен только один флажок. Как выбрать несколько флажков?
urls.py
path('student/add_teacher/<int:id>/', views.add_teacher, name='add_teacher')
views.py
def add_teacher(request, id):
student = Student.objects.get(pk=id)
student.teacher = request.user.name
student.save()
return HttpResponseRedirect(f'/student_list/')
student_list.html
<table id="student-list" class="maintable">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Sex</th>
<th>Select</th>
</tr>
</thead>
<tbody>
{% for student in students %}
<tr class="student">
<td>{{ student.name }}</td>
<td>{{ student.age }}</td>
<td>{{ student.sex }}</td>
<td><input type="checkbox"></td>
</tr>
{% endfor %}
</tbody>
</table>
<button type="button" class="btn btn-secondary addteacher">Update Teacher</button>
student_list.js
$('button.addteacher').click(function (e) {
var elem = $(".maintable input:checked").parents("tr");
var studentID = elem.attr('student-id');
var updateTeacher = confirm("will you update?");
if (updateTeacher) {
window.location.href = '/student/add_teacher/' + studentID + '/';
}
});
Придуманный мной способ - создать список выбранных идентификаторов с помощью ajax и передать его в views.py . Однако views.py не может обрабатывать несколько объектов, поскольку использует object.get(). В результате долгих поисков мы выяснили, что несколько объектов можно обрабатывать одновременно, используя транзакцию. Можно ли использовать транзакции? Уже несколько дней не могу решить эту проблему. Пожалуйста, помогите.
urls.py
path('student/add_teacher/', views.add_teacher, name='add_teacher')
views.py
def add_teacher(request):
student = Student.objects.get(pk=id) ---> Can I use a transaction here?
student.teacher = request.user.name
student.save()
return HttpResponseRedirect(f'/student_list/')
student_list.html
<table id="student-list" class="maintable">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Sex</th>
<th>Select</th>
</tr>
</thead>
<tbody>
{% for student in students %}
<tr class="student">
<td>{{ student.name }}</td>
<td>{{ student.age }}</td>
<td>{{ student.sex }}</td>
<td><input type="checkbox" class="Checked" student-id="{{ student.id }}"></td>
</tr>
{% endfor %}
</tbody>
</table>
<button type="button" class="btn btn-secondary addteacher" onclick="fn_addTeacher()">Add Teacher</button>
student_list.js
$(document).ready(function() {
$checkbox = $('.Checked');
$checkbox.click(checkArray);
function fn_addTeacher(){
checkArray();
}
function checkArray(){
var chkArray = [];
chkArray = $.map($checkbox, function(el){
if(el.checked) { return el.id };
});
console.log(chkArray);
$.ajax({
method: 'POST',
url: "/student_list/",
contentType:"application/json",
data: {'chkArray': chkArray},
traditional: true
});
}
});