начал делать множественный выбор мест на сеанс
This commit is contained in:
parent
0c7343b5a3
commit
29f950c194
@ -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');
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -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 %}
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user