diff --git a/CineSync/static/css/timetable/session.css b/CineSync/static/css/timetable/session.css index 8fa4d9b..e1978a9 100644 --- a/CineSync/static/css/timetable/session.css +++ b/CineSync/static/css/timetable/session.css @@ -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; diff --git a/CineSync/templates/timetable/session.html b/CineSync/templates/timetable/session.html index 6b0d23f..3809e16 100644 --- a/CineSync/templates/timetable/session.html +++ b/CineSync/templates/timetable/session.html @@ -22,29 +22,27 @@ -
-
- {% csrf_token %} - - - {% for row in session.auditorium.rows.all %} - - - {% for seat in seats %} - - {% endfor %} - + + {% csrf_token %} +
Ряд {{ row.row_number }} - -
+ + {% for row in session.auditorium.rows.all %} + + + {% for _ in row.column_count|get_range %} + {% endfor %} - -
Ряд {{ forloop.counter }} + +
- -
-
+ + {% endfor %} + + + + {% endblock %} \ No newline at end of file diff --git a/CineSync/timetable/admin.py b/CineSync/timetable/admin.py index cffef1f..7b30c45 100644 --- a/CineSync/timetable/admin.py +++ b/CineSync/timetable/admin.py @@ -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, ] diff --git a/CineSync/timetable/forms.py b/CineSync/timetable/forms.py index dd89ff0..886d4e6 100644 --- a/CineSync/timetable/forms.py +++ b/CineSync/timetable/forms.py @@ -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(): diff --git a/CineSync/timetable/models.py b/CineSync/timetable/models.py index 6e76995..d9d4253 100644 --- a/CineSync/timetable/models.py +++ b/CineSync/timetable/models.py @@ -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 diff --git a/CineSync/timetable/views.py b/CineSync/timetable/views.py index 809d904..6066fed 100644 --- a/CineSync/timetable/views.py +++ b/CineSync/timetable/views.py @@ -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)