поправил админку для кинозалов и переделал страницу выбора места
This commit is contained in:
parent
afbc89709a
commit
61263e05b1
@ -6,19 +6,21 @@
|
||||
background-color: #eaeaea;
|
||||
border-radius: 3vw;
|
||||
display: flex;
|
||||
width: 46%;
|
||||
max-height: 50vw;
|
||||
overflow-x: scroll;
|
||||
overflow-y: scroll;
|
||||
flex-direction: column;
|
||||
flex-wrap: nowrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 46%;
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.table_card {
|
||||
margin: 3vw;
|
||||
}
|
||||
.seat_checkbox {
|
||||
display: none;
|
||||
}
|
||||
.seat_checkbox:checked + .seat_number {
|
||||
color: #ffffff;
|
||||
color: #eaeaea;
|
||||
}
|
||||
.selected {
|
||||
background-color: #0d1d3a;
|
||||
@ -79,7 +81,8 @@
|
||||
.cell {
|
||||
background-color: transparent !important;
|
||||
height: 4vw;
|
||||
width: 3.5vw;
|
||||
min-width: 3.5vw;
|
||||
|
||||
}
|
||||
.row_number_cell {
|
||||
display: flex;
|
||||
@ -89,6 +92,7 @@
|
||||
}
|
||||
.seats_card::-webkit-scrollbar {
|
||||
height: 7px;
|
||||
width: 7px;
|
||||
}
|
||||
.seats_card::-webkit-scrollbar-thumb {
|
||||
background-color: #0d1d3a;
|
||||
|
||||
@ -22,29 +22,27 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="seats_card" style="height: {{ height }}vw;">
|
||||
<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>
|
||||
<form class="seats_card" method="post" style="height: {{ height }}vw;">
|
||||
{% csrf_token %}
|
||||
<table class="table_card">
|
||||
<tbody>
|
||||
{% for row in session.auditorium.rows.all %}
|
||||
<tr>
|
||||
<td class="row_number_cell cell">Ряд {{ forloop.counter }}</td>
|
||||
{% for _ in row.column_count|get_range %}
|
||||
<td class="cell">
|
||||
<label class="film_session">
|
||||
<input type="checkbox" name="selected_seats"
|
||||
value="[{{ forloop.counter }}, {{ row.row_number }}]" class="seat_checkbox">
|
||||
<span class="seat_number">{{ forloop.counter }}</span>
|
||||
</label>
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<button type="submit" class="btn btn-primary buy_btn">Купить билет</button>
|
||||
</form>
|
||||
</div>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
<button type="submit" class="btn btn-primary buy_btn">Купить билет</button>
|
||||
<script src="{% static 'js/timetable/session.js' %}"></script>
|
||||
{% endblock %}
|
||||
@ -3,17 +3,17 @@ from django.contrib import admin
|
||||
from timetable.models import Auditorium, Row, FilmSession
|
||||
|
||||
|
||||
class RowAdminInline(admin.StackedInline):
|
||||
model = Row
|
||||
|
||||
|
||||
@admin.register(Auditorium)
|
||||
class AuditoriumAdmin(admin.ModelAdmin):
|
||||
list_display = [
|
||||
Auditorium.number.field.name,
|
||||
]
|
||||
|
||||
|
||||
@admin.register(Row)
|
||||
class RowAdmin(admin.ModelAdmin):
|
||||
list_display = [
|
||||
Row.row_number.field.name,
|
||||
inlines = [
|
||||
RowAdminInline,
|
||||
]
|
||||
|
||||
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import pprint
|
||||
from json import loads
|
||||
|
||||
from django import forms
|
||||
@ -13,9 +14,9 @@ class SeatSelectionForm(forms.Form):
|
||||
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}]'))
|
||||
for i, row in enumerate(auditorium.rows.all(), start=1):
|
||||
for seat in range(1, row.column_count + 1):
|
||||
choices.append((f'[{seat}, {str(i)}]', f'[{seat}, {str(i)}]'))
|
||||
self.fields['selected_seats'].choices = choices
|
||||
|
||||
for field in self.visible_fields():
|
||||
|
||||
@ -39,12 +39,12 @@ class Auditorium(Model):
|
||||
verbose_name='Номер кинозала',
|
||||
)
|
||||
|
||||
row_count = IntegerField(
|
||||
verbose_name='Количество рядов кресел в зале',
|
||||
validators=[
|
||||
MinValueValidator(1),
|
||||
],
|
||||
)
|
||||
# row_count = IntegerField(
|
||||
# verbose_name='Количество рядов кресел в зале',
|
||||
# validators=[
|
||||
# MinValueValidator(1),
|
||||
# ],
|
||||
# )
|
||||
|
||||
def __str__(self):
|
||||
return self.number
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import datetime
|
||||
from datetime import date
|
||||
|
||||
from django.db.models import Max
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
|
||||
@ -41,15 +42,16 @@ def timetable_view(request):
|
||||
)
|
||||
|
||||
|
||||
from django.shortcuts import redirect
|
||||
|
||||
|
||||
def session_view(request, sess_id):
|
||||
session = get_object_or_404(
|
||||
FilmSession.objects.all(),
|
||||
id=sess_id,
|
||||
)
|
||||
height = round(session.auditorium.row_count * 4 + 7)
|
||||
height = round(session.auditorium.rows.count() * 4 + 7)
|
||||
row_with_most_seats = Row.objects.filter(auditorium=session.auditorium).only('column_count').annotate(
|
||||
max_seats=Max('column_count')
|
||||
).order_by('-max_seats').first()
|
||||
width = round(row_with_most_seats.column_count * 4 + 3)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = SeatSelectionForm(request.POST, auditorium=session.auditorium)
|
||||
@ -61,9 +63,9 @@ def session_view(request, sess_id):
|
||||
|
||||
context = {
|
||||
'session': session,
|
||||
'seats': Row.objects.filter(auditorium_id=session.auditorium.id),
|
||||
'height': height,
|
||||
'form': form,
|
||||
'width': width
|
||||
}
|
||||
template = 'timetable/session.html'
|
||||
return render(request, template, context)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user