diff --git a/CineSync/static/js/timetable/session.js b/CineSync/static/js/timetable/session.js index fa52d9d..1a77cbd 100644 --- a/CineSync/static/js/timetable/session.js +++ b/CineSync/static/js/timetable/session.js @@ -2,9 +2,9 @@ checkbox.addEventListener('change', function() { var filmSession = checkbox.closest('.film_session'); if (checkbox.checked) { - filmSession.classList.add('selected'); // Добавляем класс, если чекбокс выбран + filmSession.classList.add('selected'); } else { - filmSession.classList.remove('selected'); // Удаляем класс, если чекбокс не выбран + filmSession.classList.remove('selected'); } }); }); \ No newline at end of file diff --git a/CineSync/templates/timetable/session.html b/CineSync/templates/timetable/session.html index effbd9f..6b0d23f 100644 --- a/CineSync/templates/timetable/session.html +++ b/CineSync/templates/timetable/session.html @@ -23,26 +23,28 @@
- - - {% for row in session.auditorium.row_count|get_range %} - - - {% for seat in seats %} - + + {% csrf_token %} +
Ряд {{ row }} - -
+ + {% for row in session.auditorium.rows.all %} + + + {% for seat in seats %} + + {% endfor %} + {% endfor %} - - {% endfor %} - -
Ряд {{ row.row_number }} + +
-
- -
+ + + +
{% endblock %} \ No newline at end of file diff --git a/CineSync/timetable/forms.py b/CineSync/timetable/forms.py index 2e49454..dd89ff0 100644 --- a/CineSync/timetable/forms.py +++ b/CineSync/timetable/forms.py @@ -1,12 +1,28 @@ +from json import loads + from django import forms from timetable.models import Auditorium, Row class SeatSelectionForm(forms.Form): - def __init__(self, auditorium: Auditorium): - super().__init__() - self.selected_seats = forms.MultipleChoiceField( - widget=forms.CheckboxSelectMultiple, - choices=[(str(seat.id), seat.row_number) for seat in auditorium.rows.all()], - ) + selected_seats = forms.MultipleChoiceField( + widget=forms.CheckboxSelectMultiple(), + ) + + def __init__(self, *args, auditorium: Auditorium, **kwargs): + super().__init__(*args, **kwargs) + choices = [] + for row in auditorium.rows.all(): + for seat in range(1, auditorium.row_count + 1): + choices.append((f'[{seat}, {row.row_number}]', f'[{seat}, {row.row_number}]')) + self.fields['selected_seats'].choices = choices + + for field in self.visible_fields(): + field.field.widget.attrs.update({"class": "seat_checkbox"}) + + def clean_selected_seats(self): + selected_seats = self.cleaned_data['selected_seats'] + if list[str] is type(self.cleaned_data): + selected_seats = [loads(field) for field in selected_seats] + return selected_seats diff --git a/CineSync/timetable/views.py b/CineSync/timetable/views.py index 4de3d5c..809d904 100644 --- a/CineSync/timetable/views.py +++ b/CineSync/timetable/views.py @@ -5,6 +5,7 @@ from django.http import HttpResponse from django.shortcuts import render, get_object_or_404 from timetable.models import FilmSession, Row + from timetable.forms import SeatSelectionForm @@ -40,6 +41,9 @@ def timetable_view(request): ) +from django.shortcuts import redirect + + def session_view(request, sess_id): session = get_object_or_404( FilmSession.objects.all(), @@ -48,12 +52,18 @@ def session_view(request, sess_id): height = round(session.auditorium.row_count * 4 + 7) if request.method == 'POST': - print(request.data) + form = SeatSelectionForm(request.POST, auditorium=session.auditorium) + if form.is_valid(): + selected_seats = form.clean_selected_seats() + # return redirect('куда-то-перенаправление-после-выбора-мест') + else: + form = SeatSelectionForm(auditorium=session.auditorium) context = { 'session': session, 'seats': Row.objects.filter(auditorium_id=session.auditorium.id), 'height': height, + 'form': form, } template = 'timetable/session.html' return render(request, template, context)