Я хочу получить идентификатор из URL, чтобы я мог использовать набор запросов в diff.Методы класса.но он показывает:
schedule = get_object_or_404(Schedule, id=kwargs['pk'])
NameError: name 'kwargs' is not defined
Вот мой код:
class SubmitAttendanceView(View):
template_name = 'schedule/submit_attendance.html' # this html file will be included in 'schedule/scheduledetail.html'
form_class = AttendanceForm
schedule = get_object_or_404(Schedule, id=kwargs['pk'])
students = Student.objects.filter(course__id__in=schedule.course.all(), sem=schedule.sem, subject__id__contains=schedule.subject.id).order_by('roll_no')
def get(self, request, pk):
form = self.form_class()
return render(request, self.template_name, {'form': form, 'students': self.students})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
date = form.cleaned_data['lecture_date']
lecture = self.schedule.id
subject = self.schedule.subject.id
x = 1 # a counter to fetch each checkbox from template by their name
for student in self.students:
course = Course.objects.get(id=student.course.id)
mark = self.request.POST[f'mark{x}']
if not mark:
mark = 0
attendance = Attendance(lecture=lecture, subject=subject, course=course, student=student, lecture_date=date, mark=mark)
attendance.save()
x += 1
return redirect('schedule')
return render(request, self.template_name, {'form': form, 'students': students})
urls.py:
path('<int:pk>/submit/', SubmitAttendanceView.as_view(), name='submit-attendance')
в шаблоне:
<a class="btn btn-md btn-danger add-new my-2" type="button" href="{% url 'submit-attendance' schedule.pk %}">Submit Attendance</a>
также скажите, есть ли другой способ, которым я могу передать набор запросов в переменную и использовать его в моих методах класса
Решено:
class SubmitAttendanceView(View):
template_name = 'schedule/submit_attendance.html' # this html file will be included in 'schedule/scheduledetail.html'
form_class = AttendanceForm
def get_schedule(self, value):
return get_object_or_404(Schedule, id=value)
def get_students(self, value):
schedule = self.get_schedule(value)
# specify Students queryset
students_queryset = Student.objects.filter(course__id__in=schedule.course.all(), sem=schedule.sem, subject__id__contains=schedule.subject.id).order_by('roll_no')
return students_queryset
def get(self, request, **kwargs):
form = self.form_class()
students = self.get_students(kwargs['pk'])
return render(request, self.template_name, {'form': form, 'students': students})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
date = form.cleaned_data['lecture_date']
schedule = self.get_schedule(kwargs['pk'])
lecture = Schedule.objects.get(id=schedule.id)
subject = Subject.objects.get(id=schedule.subject.id)
x = 1 # a counter to fetch each checkbox from template by their name
students = self.get_students(kwargs['pk'])
for student in students:
course = Course.objects.get(id=student.course.id)
mark = self.request.POST.get(f'mark{x}')
if not mark:
mark = 0
attendance = Attendance(lecture=lecture, subject=subject, course=course, student=student, lecture_date=date, mark=mark)
attendance.save()
x += 1
return redirect('schedule')
return render(request, self.template_name, {'form': form, 'students': students})
После выполнения вышеуказанногоИзменения в коде, работает нормально