начал делать множественный выбор мест на сеанс
This commit is contained in:
parent
0c7343b5a3
commit
29f950c194
@ -2,9 +2,9 @@
|
|||||||
checkbox.addEventListener('change', function() {
|
checkbox.addEventListener('change', function() {
|
||||||
var filmSession = checkbox.closest('.film_session');
|
var filmSession = checkbox.closest('.film_session');
|
||||||
if (checkbox.checked) {
|
if (checkbox.checked) {
|
||||||
filmSession.classList.add('selected'); // Добавляем класс, если чекбокс выбран
|
filmSession.classList.add('selected');
|
||||||
} else {
|
} else {
|
||||||
filmSession.classList.remove('selected'); // Удаляем класс, если чекбокс не выбран
|
filmSession.classList.remove('selected');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -23,15 +23,18 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="seats_card" style="height: {{ height }}vw;">
|
<div class="seats_card" style="height: {{ height }}vw;">
|
||||||
|
<form method="post">
|
||||||
|
{% csrf_token %}
|
||||||
<table>
|
<table>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for row in session.auditorium.row_count|get_range %}
|
{% for row in session.auditorium.rows.all %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="row_number_cell cell">Ряд {{ row }}</td>
|
<td class="row_number_cell cell">Ряд {{ row.row_number }}</td>
|
||||||
{% for seat in seats %}
|
{% for seat in seats %}
|
||||||
<td class="cell">
|
<td class="cell">
|
||||||
<label class="film_session">
|
<label class="film_session">
|
||||||
<input type="checkbox" class="seat_checkbox" value="{{ seat.row_number }}">
|
<input type="checkbox" name="selected_seats"
|
||||||
|
value="[{{ seat.row_number }}, {{ row.row_number }}]" class="seat_checkbox">
|
||||||
<span class="seat_number">{{ seat.row_number }}</span>
|
<span class="seat_number">{{ seat.row_number }}</span>
|
||||||
</label>
|
</label>
|
||||||
</td>
|
</td>
|
||||||
@ -40,9 +43,8 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div>
|
<button type="submit" class="btn btn-primary buy_btn">Купить билет</button>
|
||||||
<button class="btn btn-primary buy_btn">Купить билет</button>
|
</form>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<script src="{% static 'js/timetable/session.js' %}"></script>
|
<script src="{% static 'js/timetable/session.js' %}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@ -1,12 +1,28 @@
|
|||||||
|
from json import loads
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
from timetable.models import Auditorium, Row
|
from timetable.models import Auditorium, Row
|
||||||
|
|
||||||
|
|
||||||
class SeatSelectionForm(forms.Form):
|
class SeatSelectionForm(forms.Form):
|
||||||
def __init__(self, auditorium: Auditorium):
|
selected_seats = forms.MultipleChoiceField(
|
||||||
super().__init__()
|
widget=forms.CheckboxSelectMultiple(),
|
||||||
self.selected_seats = forms.MultipleChoiceField(
|
|
||||||
widget=forms.CheckboxSelectMultiple,
|
|
||||||
choices=[(str(seat.id), seat.row_number) for seat in auditorium.rows.all()],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
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
|
||||||
|
|||||||
@ -5,6 +5,7 @@ from django.http import HttpResponse
|
|||||||
from django.shortcuts import render, get_object_or_404
|
from django.shortcuts import render, get_object_or_404
|
||||||
|
|
||||||
from timetable.models import FilmSession, Row
|
from timetable.models import FilmSession, Row
|
||||||
|
|
||||||
from timetable.forms import SeatSelectionForm
|
from timetable.forms import SeatSelectionForm
|
||||||
|
|
||||||
|
|
||||||
@ -40,6 +41,9 @@ def timetable_view(request):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
from django.shortcuts import redirect
|
||||||
|
|
||||||
|
|
||||||
def session_view(request, sess_id):
|
def session_view(request, sess_id):
|
||||||
session = get_object_or_404(
|
session = get_object_or_404(
|
||||||
FilmSession.objects.all(),
|
FilmSession.objects.all(),
|
||||||
@ -48,12 +52,18 @@ def session_view(request, sess_id):
|
|||||||
height = round(session.auditorium.row_count * 4 + 7)
|
height = round(session.auditorium.row_count * 4 + 7)
|
||||||
|
|
||||||
if request.method == 'POST':
|
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 = {
|
context = {
|
||||||
'session': session,
|
'session': session,
|
||||||
'seats': Row.objects.filter(auditorium_id=session.auditorium.id),
|
'seats': Row.objects.filter(auditorium_id=session.auditorium.id),
|
||||||
'height': height,
|
'height': height,
|
||||||
|
'form': form,
|
||||||
}
|
}
|
||||||
template = 'timetable/session.html'
|
template = 'timetable/session.html'
|
||||||
return render(request, template, context)
|
return render(request, template, context)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user