начал делать множественный выбор мест на сеанс

This commit is contained in:
Андрей Дувакин 2024-04-20 20:23:21 +05:00
parent 0c7343b5a3
commit 29f950c194
4 changed files with 56 additions and 28 deletions

View File

@ -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');
}
});
});

View File

@ -23,26 +23,28 @@
</div>
</div>
<div class="seats_card" style="height: {{ height }}vw;">
<table>
<tbody>
{% for row in session.auditorium.row_count|get_range %}
<tr>
<td class="row_number_cell cell">Ряд {{ row }}</td>
{% for seat in seats %}
<td class="cell">
<label class="film_session">
<input type="checkbox" class="seat_checkbox" value="{{ seat.row_number }}">
<span class="seat_number">{{ seat.row_number }}</span>
</label>
</td>
<form method="post">
{% csrf_token %}
<table>
<tbody>
{% for row in session.auditorium.rows.all %}
<tr>
<td class="row_number_cell cell">Ряд {{ row.row_number }}</td>
{% for seat in seats %}
<td class="cell">
<label class="film_session">
<input type="checkbox" name="selected_seats"
value="[{{ seat.row_number }}, {{ row.row_number }}]" class="seat_checkbox">
<span class="seat_number">{{ seat.row_number }}</span>
</label>
</td>
{% endfor %}
</tr>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
<div>
<button class="btn btn-primary buy_btn">Купить билет</button>
</div>
</tbody>
</table>
<button type="submit" class="btn btn-primary buy_btn">Купить билет</button>
</form>
</div>
<script src="{% static 'js/timetable/session.js' %}"></script>
{% endblock %}

View File

@ -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

View File

@ -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)