diff --git a/.example_env b/.example_env index 7d9408e..8dbf988 100644 --- a/.example_env +++ b/.example_env @@ -1,3 +1,5 @@ -SECRET_KEY=amazon -DJANGO_DEBUG=T -DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1 \ No newline at end of file +SECRET_KEY=wevras-vberagv-rebavertf-wefgre +DJANGO_DEBUG=1 +DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1 +DJANGO_DB_HOST=188.68.221.227 +DJANGO_DB_PASSWORD=127001 \ No newline at end of file diff --git a/CineSync/core/__init__.py b/CineSync/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/CineSync/core/functions.py b/CineSync/core/functions.py new file mode 100644 index 0000000..2ffb501 --- /dev/null +++ b/CineSync/core/functions.py @@ -0,0 +1,21 @@ +from timetable.models import FilmSession + + +def get_film_to_sessions(): + film_sessions = FilmSession.objects.nearest_timetable() + sessions_by_date_and_film = {} + + for session in film_sessions: + session_date = session.start_datetime.date() + session_film = session.film + sessions_by_date_and_film.setdefault(session_date, {}).setdefault( + session_film, [] + ).append(session) + + for session_date in sessions_by_date_and_film: + for session_film in sessions_by_date_and_film[session_date]: + sessions_by_date_and_film[session_date][session_film].sort( + key=lambda x: x.start_datetime + ) + + return sessions_by_date_and_film diff --git a/CineSync/core/migrations/__init__.py b/CineSync/core/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/CineSync/films/migrations/0008_alter_actor_options_alter_country_options_and_more.py b/CineSync/films/migrations/0008_alter_actor_options_alter_country_options_and_more.py new file mode 100644 index 0000000..900a4bc --- /dev/null +++ b/CineSync/films/migrations/0008_alter_actor_options_alter_country_options_and_more.py @@ -0,0 +1,39 @@ +# Generated by Django 4.2 on 2024-04-26 04:15 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('films', '0002_alter_film_genres_squashed_0007_alter_film_countries'), + ] + + operations = [ + migrations.AlterModelOptions( + name='actor', + options={'verbose_name': 'актер', 'verbose_name_plural': 'Актеры'}, + ), + migrations.AlterModelOptions( + name='country', + options={ + 'verbose_name': 'страна', + 'verbose_name_plural': 'Страны', + }, + ), + migrations.AlterModelOptions( + name='director', + options={ + 'verbose_name': 'режиссер', + 'verbose_name_plural': 'Режиссеры', + }, + ), + migrations.AlterModelOptions( + name='film', + options={'verbose_name': 'фильм', 'verbose_name_plural': 'Фильмы'}, + ), + migrations.AlterModelOptions( + name='genre', + options={'verbose_name': 'жанр', 'verbose_name_plural': 'Жанры'}, + ), + ] diff --git a/CineSync/films/models.py b/CineSync/films/models.py index 134cff2..f7f0be7 100644 --- a/CineSync/films/models.py +++ b/CineSync/films/models.py @@ -80,7 +80,7 @@ class Genre(Model): class Meta: db_table = 'films_genres' - verbose_name = 'Жанр' + verbose_name = 'жанр' verbose_name_plural = 'Жанры' @@ -102,7 +102,7 @@ class Director(Model): class Meta: db_table = 'films_directors' - verbose_name = 'Режиссер' + verbose_name = 'режиссер' verbose_name_plural = 'Режиссеры' @@ -124,7 +124,7 @@ class Actor(Model): class Meta: db_table = 'films_actors' - verbose_name = 'Актер' + verbose_name = 'актер' verbose_name_plural = 'Актеры' @@ -140,7 +140,7 @@ class Country(Model): class Meta: db_table = 'films_countries' - verbose_name = 'Страна' + verbose_name = 'страна' verbose_name_plural = 'Страны' @@ -245,5 +245,5 @@ class Film(Model): class Meta: db_table = 'films_films' - verbose_name = 'Фильм' + verbose_name = 'фильм' verbose_name_plural = 'Фильмы' diff --git a/CineSync/films/views.py b/CineSync/films/views.py index ff5a111..7b68a49 100644 --- a/CineSync/films/views.py +++ b/CineSync/films/views.py @@ -2,7 +2,7 @@ from django.http import HttpResponse from django.shortcuts import get_object_or_404, render from films.models import Film -from timetable.models import FilmSession +from core.functions import get_film_to_sessions def films_list(request: HttpResponse) -> HttpResponse: @@ -19,28 +19,7 @@ def film_details(request: HttpResponse, film_id: int) -> HttpResponse: Film.objects.released(), id=film_id, ) - film_sessions = FilmSession.objects.nearest_timetable().filter( - film_id=film_id, - ) - sessions_by_date_and_film = {} - - for session in film_sessions: - session_date = session.start_datetime.date() - if session_date not in sessions_by_date_and_film: - sessions_by_date_and_film[session_date] = {} - - film_sessions_for_date = sessions_by_date_and_film[session_date] - - if session.film not in film_sessions_for_date: - film_sessions_for_date[session.film] = [] - - film_sessions_for_date[session.film].append(session) - - for session_date, session_films in sessions_by_date_and_film.items(): - for session_film in session_films: - sessions_by_date_and_film[session_date][session_film].sort( - key=lambda sorted_session: sorted_session.start_datetime, - ) + sessions_by_date_and_film = get_film_to_sessions() context = { 'film_sessions': sessions_by_date_and_film, diff --git a/CineSync/fixtures/data.json b/CineSync/fixtures/data.json deleted file mode 100644 index 440b797..0000000 --- a/CineSync/fixtures/data.json +++ /dev/null @@ -1 +0,0 @@ -[{"model": "films.genre", "pk": 1, "fields": {"name": "Боевик"}}, {"model": "films.genre", "pk": 2, "fields": {"name": "Комедия"}}, {"model": "films.genre", "pk": 3, "fields": {"name": "Драма"}}, {"model": "films.genre", "pk": 4, "fields": {"name": "Фантастика"}}, {"model": "films.genre", "pk": 5, "fields": {"name": "Ужасы"}}, {"model": "films.genre", "pk": 6, "fields": {"name": "Триллер"}}, {"model": "films.genre", "pk": 7, "fields": {"name": "Мелодрама"}}, {"model": "films.genre", "pk": 8, "fields": {"name": "Приключения"}}, {"model": "films.genre", "pk": 9, "fields": {"name": "Фэнтези"}}, {"model": "films.genre", "pk": 10, "fields": {"name": "Мистика"}}, {"model": "films.genre", "pk": 11, "fields": {"name": "Детектив"}}, {"model": "films.genre", "pk": 12, "fields": {"name": "Анимация"}}, {"model": "films.genre", "pk": 13, "fields": {"name": "Документальный"}}, {"model": "films.genre", "pk": 14, "fields": {"name": "Исторический"}}, {"model": "films.genre", "pk": 15, "fields": {"name": "Вестерн"}}, {"model": "films.film", "pk": 1, "fields": {"name": "Звёздные войны: Эпизод IV – Новая надежда", "duration": 121, "release_date": "1977-05-25", "description": "Описание Звёздные войны: Эпизод IV – Новая надежда", "image": "users/films/1/1713368662.3231936_123.jpeg", "genres": [4, 7]}}, {"model": "films.film", "pk": 2, "fields": {"name": "Властелин колец: Братство Кольца", "duration": 178, "release_date": "2001-12-19", "description": "Описание Властелин колец: Братство Кольца", "image": "users/films/2/1713368908.7703846_234rgt.jpeg", "genres": [4, 7]}}, {"model": "films.film", "pk": 3, "fields": {"name": "Зеленая миля", "duration": 189, "release_date": "1999-12-10", "description": "Описание Зеленая миля", "image": "users/films/3/1713368611.3313107_1918ffe0-e3e5-4c52-9795-df49d0889604-022.png", "genres": [3]}}, {"model": "films.film", "pk": 4, "fields": {"name": "Форрест Гамп", "duration": 142, "release_date": "1994-06-23", "description": "Описание Форрест Гамп", "image": "users/films/4/1713368563.5637631_05455514-32ec-4960-9493-ade45d6d0750-1.png", "genres": [3]}}, {"model": "films.film", "pk": 5, "fields": {"name": "Побег из Шоушенка", "duration": 142, "release_date": "1994-09-10", "description": "Описание Побег из Шоушенка", "image": "users/films/5/1713368968.7475758_f09d19f9-3e68-4f5a-b5a0-51b817c8138b-1.png", "genres": [3]}}, {"model": "films.film", "pk": 6, "fields": {"name": "Начало", "duration": 148, "release_date": "2010-07-16", "description": "Описание Начало", "image": "users/films/6/1713369053.2213588_32b65bac-2ced-4ef0-ae71-6c246509c92a-1.png", "genres": [4, 5]}}, {"model": "films.film", "pk": 7, "fields": {"name": "Матрица", "duration": 136, "release_date": "1999-03-31", "description": "Описание Матрица", "image": "", "genres": [4]}}, {"model": "films.film", "pk": 8, "fields": {"name": "Властелин колец: Возвращение Короля", "duration": 201, "release_date": "2003-12-17", "description": "Описание Властелин колец: Возвращение Короля", "image": "", "genres": [4, 7]}}, {"model": "films.film", "pk": 9, "fields": {"name": "Интерстеллар", "duration": 169, "release_date": "2014-11-06", "description": "Описание Интерстеллар", "image": "", "genres": [3, 4]}}, {"model": "films.film", "pk": 10, "fields": {"name": "1+1", "duration": 112, "release_date": "2011-11-02", "description": "Описание 1+1", "image": "", "genres": [3, 8]}}, {"model": "films.film", "pk": 11, "fields": {"name": "Криминальное чтиво", "duration": 154, "release_date": "1994-09-10", "description": "Описание Криминальное чтиво", "image": "", "genres": [5]}}, {"model": "films.film", "pk": 12, "fields": {"name": "Король Лев", "duration": 88, "release_date": "1994-06-15", "description": "Описание Король Лев", "image": "", "genres": [7]}}, {"model": "films.film", "pk": 13, "fields": {"name": "Бойцовский клуб", "duration": 139, "release_date": "1999-10-15", "description": "Описание Бойцовский клуб", "image": "", "genres": [5, 6]}}, {"model": "films.film", "pk": 14, "fields": {"name": "Темный рыцарь", "duration": 152, "release_date": "2008-07-18", "description": "Описание Темный рыцарь", "image": "", "genres": [5, 6]}}, {"model": "films.film", "pk": 15, "fields": {"name": "Гладиатор", "duration": 155, "release_date": "2000-05-01", "description": "Описание Гладиатор", "image": "", "genres": [6]}}, {"model": "films.film", "pk": 16, "fields": {"name": "Пираты Карибского моря: Проклятие Черной жемчужины", "duration": 143, "release_date": "2003-07-09", "description": "Описание Пираты Карибского моря: Проклятие Черной жемчужины", "image": "", "genres": [7]}}, {"model": "films.film", "pk": 17, "fields": {"name": "Хороший, плохой, злой", "duration": 161, "release_date": "1966-12-23", "description": "Описание Хороший, плохой, злой", "image": "", "genres": [2, 8]}}, {"model": "films.film", "pk": 18, "fields": {"name": "Леон", "duration": 110, "release_date": "1994-09-14", "description": "Описание Леон", "image": "", "genres": [6, 9]}}, {"model": "films.film", "pk": 19, "fields": {"name": "Терминатор 2: Судный день", "duration": 137, "release_date": "1991-07-03", "description": "Описание Терминатор 2: Судный день", "image": "", "genres": [4, 9]}}, {"model": "films.film", "pk": 20, "fields": {"name": "ВАЛЛ·И", "duration": 98, "release_date": "2008-06-27", "description": "Описание ВАЛЛ·И", "image": "", "genres": [1, 4]}}, {"model": "films.film", "pk": 21, "fields": {"name": "Джанго освобожденный", "duration": 165, "release_date": "2012-12-25", "description": "Описание Джанго освобожденный", "image": "", "genres": [6]}}, {"model": "films.film", "pk": 22, "fields": {"name": "Исчезнувшая", "duration": 145, "release_date": "2014-10-02", "description": "Описание Исчезнувшая", "image": "", "genres": [6]}}, {"model": "films.film", "pk": 23, "fields": {"name": "Храброе сердце", "duration": 177, "release_date": "1995-09-08", "description": "Описание Храброе сердце", "image": "", "genres": [6]}}, {"model": "films.film", "pk": 24, "fields": {"name": "Гарри Поттер и Философский камень", "duration": 152, "release_date": "2001-11-16", "description": "Описание Гарри Поттер и Философский камень", "image": "", "genres": [7, 9]}}, {"model": "films.film", "pk": 25, "fields": {"name": "Индиана Джонс: В поисках утраченного ковчега", "duration": 115, "release_date": "1981-06-12", "description": "Описание Индиана Джонс: В поисках утраченного ковчега", "image": "", "genres": [6, 7]}}, {"model": "films.film", "pk": 26, "fields": {"name": "Красота по-американски", "duration": 122, "release_date": "1999-09-08", "description": "Описание Красота по-американски", "image": "", "genres": [2, 8]}}, {"model": "films.film", "pk": 27, "fields": {"name": "Трасса 60", "duration": 92, "release_date": "2001-02-09", "description": "Описание Трасса 60", "image": "", "genres": [1]}}, {"model": "films.film", "pk": 28, "fields": {"name": "Храбрая сердцем", "duration": 93, "release_date": "2012-06-22", "description": "Описание Храбрая сердцем", "image": "", "genres": [6, 9]}}, {"model": "films.film", "pk": 29, "fields": {"name": "Кунг-фу Панда", "duration": 92, "release_date": "2008-06-05", "description": "Описание Кунг-фу Панда", "image": "", "genres": [10, 11]}}, {"model": "films.film", "pk": 30, "fields": {"name": "Рататуй", "duration": 111, "release_date": "2007-06-28", "description": "Описание Рататуй", "image": "", "genres": [10, 11]}}, {"model": "films.film", "pk": 31, "fields": {"name": "Голодные игры", "duration": 142, "release_date": "2012-03-12", "description": "Описание Голодные игры", "image": "", "genres": [6, 11]}}, {"model": "films.film", "pk": 32, "fields": {"name": "Мадагаскар", "duration": 86, "release_date": "2005-05-25", "description": "Описание Мадагаскар", "image": "", "genres": [10, 11]}}, {"model": "films.film", "pk": 33, "fields": {"name": "Человек-паук", "duration": 121, "release_date": "2002-05-03", "description": "Описание Человек-паук", "image": "", "genres": [1, 12]}}, {"model": "films.film", "pk": 34, "fields": {"name": "Кунг-фу Панда 2", "duration": 91, "release_date": "2011-05-26", "description": "Описание Кунг-фу Панда 2", "image": "", "genres": [10, 11]}}, {"model": "films.film", "pk": 35, "fields": {"name": "Мечтатели", "duration": 127, "release_date": "2003-11-19", "description": "Описание Мечтатели", "image": "", "genres": [3]}}, {"model": "films.film", "pk": 36, "fields": {"name": "Гарри Поттер и узник Азкабана", "duration": 142, "release_date": "2004-05-31", "description": "Описание Гарри Поттер и узник Азкабана", "image": "", "genres": [4, 7]}}, {"model": "films.film", "pk": 37, "fields": {"name": "Люди Икс", "duration": 104, "release_date": "2000-07-13", "description": "Описание Люди Икс", "image": "", "genres": [1, 4]}}, {"model": "films.film", "pk": 38, "fields": {"name": "Хранители", "duration": 162, "release_date": "2009-03-06", "description": "Описание Хранители", "image": "", "genres": [4, 7]}}, {"model": "films.film", "pk": 39, "fields": {"name": "Трансформеры", "duration": 144, "release_date": "2007-06-27", "description": "Описание Трансформеры", "image": "", "genres": [1, 4]}}, {"model": "films.film", "pk": 40, "fields": {"name": "Темный рыцарь: Возрождение легенды", "duration": 164, "release_date": "2012-07-16", "description": "Описание Темный рыцарь: Возрождение легенды", "image": "", "genres": [6, 7]}}, {"model": "timetable.auditorium", "pk": 1, "fields": {"number": "Зал 1", "row_count": 10}}, {"model": "timetable.auditorium", "pk": 2, "fields": {"number": "Зал 2", "row_count": 8}}, {"model": "timetable.auditorium", "pk": 3, "fields": {"number": "Зал 3", "row_count": 12}}, {"model": "timetable.auditorium", "pk": 4, "fields": {"number": "Зал 4", "row_count": 9}}, {"model": "timetable.auditorium", "pk": 5, "fields": {"number": "Зал 5", "row_count": 11}}, {"model": "timetable.auditorium", "pk": 6, "fields": {"number": "Зал 6", "row_count": 7}}, {"model": "timetable.auditorium", "pk": 7, "fields": {"number": "Зал 7", "row_count": 10}}, {"model": "timetable.row", "pk": 1, "fields": {"row_number": 1, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 2, "fields": {"row_number": 2, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 3, "fields": {"row_number": 3, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 4, "fields": {"row_number": 4, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 5, "fields": {"row_number": 5, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 6, "fields": {"row_number": 6, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 7, "fields": {"row_number": 7, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 8, "fields": {"row_number": 8, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 9, "fields": {"row_number": 9, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 10, "fields": {"row_number": 10, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 11, "fields": {"row_number": 1, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 12, "fields": {"row_number": 2, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 13, "fields": {"row_number": 3, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 14, "fields": {"row_number": 4, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 15, "fields": {"row_number": 5, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 16, "fields": {"row_number": 6, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 17, "fields": {"row_number": 7, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 18, "fields": {"row_number": 8, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 19, "fields": {"row_number": 9, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 20, "fields": {"row_number": 10, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 21, "fields": {"row_number": 1, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 22, "fields": {"row_number": 2, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 23, "fields": {"row_number": 3, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 24, "fields": {"row_number": 4, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 25, "fields": {"row_number": 5, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 26, "fields": {"row_number": 6, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 27, "fields": {"row_number": 7, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 28, "fields": {"row_number": 8, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 29, "fields": {"row_number": 9, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 30, "fields": {"row_number": 10, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 31, "fields": {"row_number": 1, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 32, "fields": {"row_number": 2, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 33, "fields": {"row_number": 3, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 34, "fields": {"row_number": 4, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 35, "fields": {"row_number": 5, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 36, "fields": {"row_number": 6, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 37, "fields": {"row_number": 7, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 38, "fields": {"row_number": 8, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 39, "fields": {"row_number": 9, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 40, "fields": {"row_number": 10, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 41, "fields": {"row_number": 1, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 42, "fields": {"row_number": 2, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 43, "fields": {"row_number": 3, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 44, "fields": {"row_number": 4, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 45, "fields": {"row_number": 5, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 46, "fields": {"row_number": 6, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 47, "fields": {"row_number": 7, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 48, "fields": {"row_number": 8, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 49, "fields": {"row_number": 9, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 50, "fields": {"row_number": 10, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 51, "fields": {"row_number": 1, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 52, "fields": {"row_number": 2, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 53, "fields": {"row_number": 3, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 54, "fields": {"row_number": 4, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 55, "fields": {"row_number": 5, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 56, "fields": {"row_number": 6, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 57, "fields": {"row_number": 7, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 58, "fields": {"row_number": 8, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 59, "fields": {"row_number": 9, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 60, "fields": {"row_number": 10, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 61, "fields": {"row_number": 1, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 62, "fields": {"row_number": 2, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 63, "fields": {"row_number": 3, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 64, "fields": {"row_number": 4, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 65, "fields": {"row_number": 5, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 66, "fields": {"row_number": 6, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 67, "fields": {"row_number": 7, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 68, "fields": {"row_number": 8, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 69, "fields": {"row_number": 9, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 70, "fields": {"row_number": 10, "column_count": 10, "auditorium": 7}}, {"model": "timetable.filmsession", "pk": 1961, "fields": {"start_datetime": "2024-04-18T08:00:00Z", "end_datetime": "2024-04-18T10:01:00Z", "price": 500.0, "film": 1, "auditorium": 1}}, {"model": "timetable.filmsession", "pk": 1962, "fields": {"start_datetime": "2024-04-19T08:00:00Z", "end_datetime": "2024-04-19T10:58:00Z", "price": 500.0, "film": 2, "auditorium": 1}}, {"model": "timetable.filmsession", "pk": 1963, "fields": {"start_datetime": "2024-04-20T08:00:00Z", "end_datetime": "2024-04-20T11:09:00Z", "price": 500.0, "film": 3, "auditorium": 2}}, {"model": "timetable.filmsession", "pk": 1964, "fields": {"start_datetime": "2024-04-21T08:00:00Z", "end_datetime": "2024-04-21T10:22:00Z", "price": 500.0, "film": 4, "auditorium": 3}}, {"model": "timetable.filmsession", "pk": 1965, "fields": {"start_datetime": "2024-04-20T08:00:00Z", "end_datetime": "2024-04-20T10:22:00Z", "price": 500.0, "film": 5, "auditorium": 4}}, {"model": "timetable.filmsession", "pk": 1966, "fields": {"start_datetime": "2024-04-18T15:00:00Z", "end_datetime": "2024-04-18T17:28:00Z", "price": 500.0, "film": 6, "auditorium": 1}}, {"model": "timetable.filmsession", "pk": 1967, "fields": {"start_datetime": "2024-04-18T08:00:00Z", "end_datetime": "2024-04-18T10:16:00Z", "price": 500.0, "film": 7, "auditorium": 2}}, {"model": "timetable.filmsession", "pk": 1968, "fields": {"start_datetime": "2024-04-11T08:00:00Z", "end_datetime": "2024-04-11T11:21:00Z", "price": 500.0, "film": 8, "auditorium": 3}}, {"model": "timetable.filmsession", "pk": 1969, "fields": {"start_datetime": "2024-04-18T08:01:00Z", "end_datetime": "2024-04-18T10:02:00Z", "price": 500.0, "film": 1, "auditorium": 1}}, {"model": "timetable.filmsession", "pk": 1970, "fields": {"start_datetime": "2024-04-19T10:00:00Z", "end_datetime": "2024-04-19T13:09:00Z", "price": 350.0, "film": 3, "auditorium": 5}}, {"model": "timetable.filmsession", "pk": 1971, "fields": {"start_datetime": "2024-04-19T12:00:00Z", "end_datetime": "2024-04-19T15:09:00Z", "price": 400.0, "film": 3, "auditorium": 6}}, {"model": "timetable.filmsession", "pk": 1972, "fields": {"start_datetime": "2024-04-22T12:00:00Z", "end_datetime": "2024-04-22T14:49:00Z", "price": 500.0, "film": 9, "auditorium": 1}}, {"model": "timetable.filmsession", "pk": 1973, "fields": {"start_datetime": "2024-04-22T12:00:00Z", "end_datetime": "2024-04-22T13:28:00Z", "price": 350.0, "film": 12, "auditorium": 2}}, {"model": "users.profile", "pk": 1, "fields": {"user": 1, "birthday": "2004-07-11", "role": "", "image": "users/avatars/1/1713326226.8362648_Лого.png", "genres": []}}, {"model": "admin.logentry", "pk": 1, "fields": {"action_time": "2024-04-17T03:28:05.424Z", "user": 1, "content_type": 4, "object_id": "1", "object_repr": "andrei", "action_flag": 2, "change_message": "[{\"changed\": {\"name\": \"\\u0414\\u0430\\u043d\\u043d\\u044b\\u0435 \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\", \"object\": \"Profile object (1)\", \"fields\": [\"\\u0410\\u0432\\u0430\\u0442\\u0430\\u0440 \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\"]}}]"}}, {"model": "admin.logentry", "pk": 2, "fields": {"action_time": "2024-04-17T03:56:48.532Z", "user": 1, "content_type": 4, "object_id": "1", "object_repr": "andrei", "action_flag": 2, "change_message": "[{\"changed\": {\"name\": \"\\u0414\\u0430\\u043d\\u043d\\u044b\\u0435 \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\", \"object\": \"Profile object (1)\", \"fields\": [\"\\u0414\\u0430\\u0442\\u0430 \\u0440\\u043e\\u0436\\u0434\\u0435\\u043d\\u0438\\u044f \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\"]}}]"}}, {"model": "admin.logentry", "pk": 3, "fields": {"action_time": "2024-04-17T03:57:06.840Z", "user": 1, "content_type": 4, "object_id": "1", "object_repr": "andrei", "action_flag": 2, "change_message": "[{\"changed\": {\"name\": \"\\u0414\\u0430\\u043d\\u043d\\u044b\\u0435 \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\", \"object\": \"Profile object (1)\", \"fields\": [\"\\u0410\\u0432\\u0430\\u0442\\u0430\\u0440 \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\"]}}]"}}, {"model": "admin.logentry", "pk": 4, "fields": {"action_time": "2024-04-17T13:38:16.401Z", "user": 1, "content_type": 8, "object_id": "3", "object_repr": "Film object (3)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 5, "fields": {"action_time": "2024-04-17T14:56:35.607Z", "user": 1, "content_type": 8, "object_id": "1", "object_repr": "Film object (1)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 6, "fields": {"action_time": "2024-04-17T15:14:32.216Z", "user": 1, "content_type": 8, "object_id": "2", "object_repr": "Film object (2)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 7, "fields": {"action_time": "2024-04-17T15:16:58.889Z", "user": 1, "content_type": 8, "object_id": "3", "object_repr": "Film object (3)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 8, "fields": {"action_time": "2024-04-17T15:17:49.601Z", "user": 1, "content_type": 8, "object_id": "3", "object_repr": "Film object (3)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 9, "fields": {"action_time": "2024-04-17T15:21:32.096Z", "user": 1, "content_type": 8, "object_id": "3", "object_repr": "Film object (3)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 10, "fields": {"action_time": "2024-04-17T15:21:44.201Z", "user": 1, "content_type": 8, "object_id": "2", "object_repr": "Film object (2)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 11, "fields": {"action_time": "2024-04-17T15:21:48.122Z", "user": 1, "content_type": 8, "object_id": "1", "object_repr": "Film object (1)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 12, "fields": {"action_time": "2024-04-17T15:21:59.756Z", "user": 1, "content_type": 8, "object_id": "1", "object_repr": "Film object (1)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 13, "fields": {"action_time": "2024-04-17T15:22:09.807Z", "user": 1, "content_type": 8, "object_id": "2", "object_repr": "Film object (2)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 14, "fields": {"action_time": "2024-04-17T15:22:52.150Z", "user": 1, "content_type": 8, "object_id": "3", "object_repr": "Film object (3)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 15, "fields": {"action_time": "2024-04-17T15:41:02.569Z", "user": 1, "content_type": 8, "object_id": "4", "object_repr": "Film object (4)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 16, "fields": {"action_time": "2024-04-17T15:41:57.450Z", "user": 1, "content_type": 8, "object_id": "4", "object_repr": "Film object (4)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 17, "fields": {"action_time": "2024-04-17T15:42:43.565Z", "user": 1, "content_type": 8, "object_id": "4", "object_repr": "Film object (4)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 18, "fields": {"action_time": "2024-04-17T15:43:31.333Z", "user": 1, "content_type": 8, "object_id": "3", "object_repr": "Film object (3)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 19, "fields": {"action_time": "2024-04-17T15:44:22.325Z", "user": 1, "content_type": 8, "object_id": "1", "object_repr": "Film object (1)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 20, "fields": {"action_time": "2024-04-17T15:48:28.772Z", "user": 1, "content_type": 8, "object_id": "2", "object_repr": "Film object (2)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 21, "fields": {"action_time": "2024-04-17T15:49:28.749Z", "user": 1, "content_type": 8, "object_id": "5", "object_repr": "Film object (5)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 22, "fields": {"action_time": "2024-04-17T15:50:53.223Z", "user": 1, "content_type": 8, "object_id": "6", "object_repr": "Film object (6)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0444\\u0438\\u043b\\u044c\\u043c\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 23, "fields": {"action_time": "2024-04-18T08:34:43.229Z", "user": 1, "content_type": 4, "object_id": "1", "object_repr": "andrei", "action_flag": 2, "change_message": "[{\"changed\": {\"name\": \"\\u0414\\u0430\\u043d\\u043d\\u044b\\u0435 \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\", \"object\": \"Profile object (1)\", \"fields\": [\"\\u0414\\u0430\\u0442\\u0430 \\u0440\\u043e\\u0436\\u0434\\u0435\\u043d\\u0438\\u044f \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\"]}}]"}}, {"model": "admin.logentry", "pk": 24, "fields": {"action_time": "2024-04-18T08:34:59.695Z", "user": 1, "content_type": 4, "object_id": "1", "object_repr": "andrei", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 25, "fields": {"action_time": "2024-04-18T17:18:57.477Z", "user": 1, "content_type": 14, "object_id": "1969", "object_repr": "FilmSession object (1969)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 26, "fields": {"action_time": "2024-04-18T17:19:04.178Z", "user": 1, "content_type": 14, "object_id": "1969", "object_repr": "FilmSession object (1969)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0414\\u0430\\u0442\\u0430 \\u0438 \\u0432\\u0440\\u0435\\u043c\\u044f \\u043d\\u0430\\u0447\\u0430\\u043b\\u0430 \\u0441\\u0435\\u0430\\u043d\\u0441\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 27, "fields": {"action_time": "2024-04-18T17:19:08.112Z", "user": 1, "content_type": 14, "object_id": "1969", "object_repr": "FilmSession object (1969)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 28, "fields": {"action_time": "2024-04-18T17:25:21.777Z", "user": 1, "content_type": 14, "object_id": "1969", "object_repr": "FilmSession object (1969)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 29, "fields": {"action_time": "2024-04-18T17:25:27.988Z", "user": 1, "content_type": 14, "object_id": "1968", "object_repr": "FilmSession object (1968)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 30, "fields": {"action_time": "2024-04-18T17:25:31.216Z", "user": 1, "content_type": 14, "object_id": "1968", "object_repr": "FilmSession object (1968)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 31, "fields": {"action_time": "2024-04-18T17:25:35.928Z", "user": 1, "content_type": 14, "object_id": "1967", "object_repr": "FilmSession object (1967)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 32, "fields": {"action_time": "2024-04-18T17:25:45.512Z", "user": 1, "content_type": 14, "object_id": "1967", "object_repr": "FilmSession object (1967)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 33, "fields": {"action_time": "2024-04-18T17:25:49.764Z", "user": 1, "content_type": 14, "object_id": "1966", "object_repr": "FilmSession object (1966)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 34, "fields": {"action_time": "2024-04-18T17:25:53.042Z", "user": 1, "content_type": 14, "object_id": "1966", "object_repr": "FilmSession object (1966)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 35, "fields": {"action_time": "2024-04-18T17:25:57.526Z", "user": 1, "content_type": 14, "object_id": "1965", "object_repr": "FilmSession object (1965)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 36, "fields": {"action_time": "2024-04-18T17:26:00.738Z", "user": 1, "content_type": 14, "object_id": "1965", "object_repr": "FilmSession object (1965)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 37, "fields": {"action_time": "2024-04-18T17:26:03.870Z", "user": 1, "content_type": 14, "object_id": "1964", "object_repr": "FilmSession object (1964)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 38, "fields": {"action_time": "2024-04-18T17:26:06.211Z", "user": 1, "content_type": 14, "object_id": "1964", "object_repr": "FilmSession object (1964)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 39, "fields": {"action_time": "2024-04-18T17:26:09.261Z", "user": 1, "content_type": 14, "object_id": "1963", "object_repr": "FilmSession object (1963)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 40, "fields": {"action_time": "2024-04-18T17:26:13.319Z", "user": 1, "content_type": 14, "object_id": "1963", "object_repr": "FilmSession object (1963)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 41, "fields": {"action_time": "2024-04-18T17:26:16.658Z", "user": 1, "content_type": 14, "object_id": "1962", "object_repr": "FilmSession object (1962)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 42, "fields": {"action_time": "2024-04-18T17:26:21.430Z", "user": 1, "content_type": 14, "object_id": "1961", "object_repr": "FilmSession object (1961)", "action_flag": 2, "change_message": "[]"}}, {"model": "admin.logentry", "pk": 43, "fields": {"action_time": "2024-04-18T17:26:44.133Z", "user": 1, "content_type": 14, "object_id": "1969", "object_repr": "FilmSession object (1969)", "action_flag": 2, "change_message": "[{\"changed\": {\"fields\": [\"\\u0414\\u0430\\u0442\\u0430 \\u0438 \\u0432\\u0440\\u0435\\u043c\\u044f \\u043d\\u0430\\u0447\\u0430\\u043b\\u0430 \\u0441\\u0435\\u0430\\u043d\\u0441\\u0430\"]}}]"}}, {"model": "admin.logentry", "pk": 44, "fields": {"action_time": "2024-04-18T17:27:48.226Z", "user": 1, "content_type": 14, "object_id": "1970", "object_repr": "FilmSession object (1970)", "action_flag": 1, "change_message": "[{\"added\": {}}]"}}, {"model": "admin.logentry", "pk": 45, "fields": {"action_time": "2024-04-18T17:28:20.791Z", "user": 1, "content_type": 14, "object_id": "1971", "object_repr": "FilmSession object (1971)", "action_flag": 1, "change_message": "[{\"added\": {}}]"}}, {"model": "admin.logentry", "pk": 46, "fields": {"action_time": "2024-04-18T17:29:46.482Z", "user": 1, "content_type": 14, "object_id": "1972", "object_repr": "FilmSession object (1972)", "action_flag": 1, "change_message": "[{\"added\": {}}]"}}, {"model": "admin.logentry", "pk": 47, "fields": {"action_time": "2024-04-18T17:30:08.137Z", "user": 1, "content_type": 14, "object_id": "1973", "object_repr": "FilmSession object (1973)", "action_flag": 1, "change_message": "[{\"added\": {}}]"}}, {"model": "auth.permission", "pk": 1, "fields": {"name": "Can add log entry", "content_type": 1, "codename": "add_logentry"}}, {"model": "auth.permission", "pk": 2, "fields": {"name": "Can change log entry", "content_type": 1, "codename": "change_logentry"}}, {"model": "auth.permission", "pk": 3, "fields": {"name": "Can delete log entry", "content_type": 1, "codename": "delete_logentry"}}, {"model": "auth.permission", "pk": 4, "fields": {"name": "Can view log entry", "content_type": 1, "codename": "view_logentry"}}, {"model": "auth.permission", "pk": 5, "fields": {"name": "Can add permission", "content_type": 2, "codename": "add_permission"}}, {"model": "auth.permission", "pk": 6, "fields": {"name": "Can change permission", "content_type": 2, "codename": "change_permission"}}, {"model": "auth.permission", "pk": 7, "fields": {"name": "Can delete permission", "content_type": 2, "codename": "delete_permission"}}, {"model": "auth.permission", "pk": 8, "fields": {"name": "Can view permission", "content_type": 2, "codename": "view_permission"}}, {"model": "auth.permission", "pk": 9, "fields": {"name": "Can add group", "content_type": 3, "codename": "add_group"}}, {"model": "auth.permission", "pk": 10, "fields": {"name": "Can change group", "content_type": 3, "codename": "change_group"}}, {"model": "auth.permission", "pk": 11, "fields": {"name": "Can delete group", "content_type": 3, "codename": "delete_group"}}, {"model": "auth.permission", "pk": 12, "fields": {"name": "Can view group", "content_type": 3, "codename": "view_group"}}, {"model": "auth.permission", "pk": 13, "fields": {"name": "Can add user", "content_type": 4, "codename": "add_user"}}, {"model": "auth.permission", "pk": 14, "fields": {"name": "Can change user", "content_type": 4, "codename": "change_user"}}, {"model": "auth.permission", "pk": 15, "fields": {"name": "Can delete user", "content_type": 4, "codename": "delete_user"}}, {"model": "auth.permission", "pk": 16, "fields": {"name": "Can view user", "content_type": 4, "codename": "view_user"}}, {"model": "auth.permission", "pk": 17, "fields": {"name": "Can add content type", "content_type": 5, "codename": "add_contenttype"}}, {"model": "auth.permission", "pk": 18, "fields": {"name": "Can change content type", "content_type": 5, "codename": "change_contenttype"}}, {"model": "auth.permission", "pk": 19, "fields": {"name": "Can delete content type", "content_type": 5, "codename": "delete_contenttype"}}, {"model": "auth.permission", "pk": 20, "fields": {"name": "Can view content type", "content_type": 5, "codename": "view_contenttype"}}, {"model": "auth.permission", "pk": 21, "fields": {"name": "Can add session", "content_type": 6, "codename": "add_session"}}, {"model": "auth.permission", "pk": 22, "fields": {"name": "Can change session", "content_type": 6, "codename": "change_session"}}, {"model": "auth.permission", "pk": 23, "fields": {"name": "Can delete session", "content_type": 6, "codename": "delete_session"}}, {"model": "auth.permission", "pk": 24, "fields": {"name": "Can view session", "content_type": 6, "codename": "view_session"}}, {"model": "auth.permission", "pk": 25, "fields": {"name": "Can add kv store", "content_type": 7, "codename": "add_kvstore"}}, {"model": "auth.permission", "pk": 26, "fields": {"name": "Can change kv store", "content_type": 7, "codename": "change_kvstore"}}, {"model": "auth.permission", "pk": 27, "fields": {"name": "Can delete kv store", "content_type": 7, "codename": "delete_kvstore"}}, {"model": "auth.permission", "pk": 28, "fields": {"name": "Can view kv store", "content_type": 7, "codename": "view_kvstore"}}, {"model": "auth.permission", "pk": 29, "fields": {"name": "Can add Фильм", "content_type": 8, "codename": "add_film"}}, {"model": "auth.permission", "pk": 30, "fields": {"name": "Can change Фильм", "content_type": 8, "codename": "change_film"}}, {"model": "auth.permission", "pk": 31, "fields": {"name": "Can delete Фильм", "content_type": 8, "codename": "delete_film"}}, {"model": "auth.permission", "pk": 32, "fields": {"name": "Can view Фильм", "content_type": 8, "codename": "view_film"}}, {"model": "auth.permission", "pk": 33, "fields": {"name": "Can add Жанр", "content_type": 9, "codename": "add_genre"}}, {"model": "auth.permission", "pk": 34, "fields": {"name": "Can change Жанр", "content_type": 9, "codename": "change_genre"}}, {"model": "auth.permission", "pk": 35, "fields": {"name": "Can delete Жанр", "content_type": 9, "codename": "delete_genre"}}, {"model": "auth.permission", "pk": 36, "fields": {"name": "Can view Жанр", "content_type": 9, "codename": "view_genre"}}, {"model": "auth.permission", "pk": 37, "fields": {"name": "Can add Место", "content_type": 10, "codename": "add_rows"}}, {"model": "auth.permission", "pk": 38, "fields": {"name": "Can change Место", "content_type": 10, "codename": "change_rows"}}, {"model": "auth.permission", "pk": 39, "fields": {"name": "Can delete Место", "content_type": 10, "codename": "delete_rows"}}, {"model": "auth.permission", "pk": 40, "fields": {"name": "Can view Место", "content_type": 10, "codename": "view_rows"}}, {"model": "auth.permission", "pk": 41, "fields": {"name": "Can add Зал", "content_type": 11, "codename": "add_auditorium"}}, {"model": "auth.permission", "pk": 42, "fields": {"name": "Can change Зал", "content_type": 11, "codename": "change_auditorium"}}, {"model": "auth.permission", "pk": 43, "fields": {"name": "Can delete Зал", "content_type": 11, "codename": "delete_auditorium"}}, {"model": "auth.permission", "pk": 44, "fields": {"name": "Can view Зал", "content_type": 11, "codename": "view_auditorium"}}, {"model": "auth.permission", "pk": 45, "fields": {"name": "Can add Данные пользователя", "content_type": 12, "codename": "add_profile"}}, {"model": "auth.permission", "pk": 46, "fields": {"name": "Can change Данные пользователя", "content_type": 12, "codename": "change_profile"}}, {"model": "auth.permission", "pk": 47, "fields": {"name": "Can delete Данные пользователя", "content_type": 12, "codename": "delete_profile"}}, {"model": "auth.permission", "pk": 48, "fields": {"name": "Can view Данные пользователя", "content_type": 12, "codename": "view_profile"}}, {"model": "auth.permission", "pk": 49, "fields": {"name": "Can add ticket", "content_type": 13, "codename": "add_ticket"}}, {"model": "auth.permission", "pk": 50, "fields": {"name": "Can change ticket", "content_type": 13, "codename": "change_ticket"}}, {"model": "auth.permission", "pk": 51, "fields": {"name": "Can delete ticket", "content_type": 13, "codename": "delete_ticket"}}, {"model": "auth.permission", "pk": 52, "fields": {"name": "Can view ticket", "content_type": 13, "codename": "view_ticket"}}, {"model": "auth.permission", "pk": 53, "fields": {"name": "Can add Место", "content_type": 10, "codename": "add_row"}}, {"model": "auth.permission", "pk": 54, "fields": {"name": "Can change Место", "content_type": 10, "codename": "change_row"}}, {"model": "auth.permission", "pk": 55, "fields": {"name": "Can delete Место", "content_type": 10, "codename": "delete_row"}}, {"model": "auth.permission", "pk": 56, "fields": {"name": "Can view Место", "content_type": 10, "codename": "view_row"}}, {"model": "auth.permission", "pk": 57, "fields": {"name": "Can add Сеанс", "content_type": 14, "codename": "add_filmsession"}}, {"model": "auth.permission", "pk": 58, "fields": {"name": "Can change Сеанс", "content_type": 14, "codename": "change_filmsession"}}, {"model": "auth.permission", "pk": 59, "fields": {"name": "Can delete Сеанс", "content_type": 14, "codename": "delete_filmsession"}}, {"model": "auth.permission", "pk": 60, "fields": {"name": "Can view Сеанс", "content_type": 14, "codename": "view_filmsession"}}, {"model": "auth.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$600000$SGMNgRa9Qn3vy2iqDx9HJs$po/Vjiyupr3KPrXLB3LV7KhTcGIKZ72zlI1BIWXywKU=", "last_login": "2024-04-18T08:24:35Z", "is_superuser": true, "username": "andrei", "first_name": "Андрей", "last_name": "Дувакин", "email": "andrei@duvakin.ru", "is_staff": true, "is_active": true, "date_joined": "2024-04-16T18:11:38Z", "groups": [], "user_permissions": []}}, {"model": "contenttypes.contenttype", "pk": 1, "fields": {"app_label": "admin", "model": "logentry"}}, {"model": "contenttypes.contenttype", "pk": 2, "fields": {"app_label": "auth", "model": "permission"}}, {"model": "contenttypes.contenttype", "pk": 3, "fields": {"app_label": "auth", "model": "group"}}, {"model": "contenttypes.contenttype", "pk": 4, "fields": {"app_label": "auth", "model": "user"}}, {"model": "contenttypes.contenttype", "pk": 5, "fields": {"app_label": "contenttypes", "model": "contenttype"}}, {"model": "contenttypes.contenttype", "pk": 6, "fields": {"app_label": "sessions", "model": "session"}}, {"model": "contenttypes.contenttype", "pk": 7, "fields": {"app_label": "thumbnail", "model": "kvstore"}}, {"model": "contenttypes.contenttype", "pk": 8, "fields": {"app_label": "films", "model": "film"}}, {"model": "contenttypes.contenttype", "pk": 9, "fields": {"app_label": "films", "model": "genre"}}, {"model": "contenttypes.contenttype", "pk": 10, "fields": {"app_label": "timetable", "model": "row"}}, {"model": "contenttypes.contenttype", "pk": 11, "fields": {"app_label": "timetable", "model": "auditorium"}}, {"model": "contenttypes.contenttype", "pk": 12, "fields": {"app_label": "users", "model": "profile"}}, {"model": "contenttypes.contenttype", "pk": 13, "fields": {"app_label": "tickets", "model": "ticket"}}, {"model": "contenttypes.contenttype", "pk": 14, "fields": {"app_label": "timetable", "model": "filmsession"}}, {"model": "sessions.session", "pk": "c8a5h64jgyuvsmdbs1791zvxikkyr5q9", "fields": {"session_data": ".eJxVjEEOwiAQRe_C2hDKSKEu3fcMZJgZbNVAUtqV8e7apAvd_vfef6mI2zrFrckSZ1YX1anT75aQHlJ2wHcst6qplnWZk94VfdCmx8ryvB7u38GEbfrW0PXMhMKGQCgYyQ69hESuc2TAJkeWgu3FWxgQDYgHHhyDSMYzZ_X-AA28ORQ:1rxN4N:QB0QbZ4KoIUnlFXYOjDPdAVPcMqLi7gfK-kyqGqc1-c", "expire_date": "2024-05-02T08:24:35.218Z"}}, {"model": "sessions.session", "pk": "fqbsrxl79noi79dd6o4cey4pbtx8jizn", "fields": {"session_data": ".eJxVjEEOwiAQRe_C2hDKSKEu3fcMZJgZbNVAUtqV8e7apAvd_vfef6mI2zrFrckSZ1YX1anT75aQHlJ2wHcst6qplnWZk94VfdCmx8ryvB7u38GEbfrW0PXMhMKGQCgYyQ69hESuc2TAJkeWgu3FWxgQDYgHHhyDSMYzZ_X-AA28ORQ:1rxMgK:HhzANHQTKETVTu9xLO9f-cm8UOI73nBrOKV6k-uht2s", "expire_date": "2024-05-02T07:59:44.282Z"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||0710b840a8d4bd6808a122695bcc1284", "fields": {"value": "{\"name\": \"users/films/6/1713369053.2213588_32b65bac-2ced-4ef0-ae71-6c246509c92a-1.png\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [768, 512]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||255304c1809b3183e2de30d5d0905a65", "fields": {"value": "{\"name\": \"cache/30/67/30678ff17bac7f592d61af6a403fceaf.jpg\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [300, 300]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||2c2f381181cfdf98c05259a54f5e45a0", "fields": {"value": "{\"name\": \"users/films/3/1713368611.3313107_1918ffe0-e3e5-4c52-9795-df49d0889604-022.png\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [768, 422]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||31ce81563bf79ee5031ccf888deeef31", "fields": {"value": "{\"name\": \"users/films/4/1713368563.5637631_05455514-32ec-4960-9493-ade45d6d0750-1.png\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [768, 512]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||3db8a1bc7c3b5eb9c9a200addd811092", "fields": {"value": "{\"name\": \"users/films/5/1713368968.7475758_f09d19f9-3e68-4f5a-b5a0-51b817c8138b-1.png\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [768, 512]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||3e3d9f80985fb97b94786fb2d5a2f785", "fields": {"value": "{\"name\": \"users/films/2/1713368908.7703846_234rgt.jpeg\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [1024, 1024]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||7d537041a23511bd3eb1ead56f9b71a7", "fields": {"value": "{\"name\": \"users/films/1/1713368662.3231936_123.jpeg\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [1024, 519]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||864b602a2ef9a0aa66dbadf9cfa4a4ed", "fields": {"value": "{\"name\": \"cache/2a/8b/2a8b3f3bbd6aafda1bf958c36b4219b4.jpg\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [300, 300]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||bbcad553c1e2a348d58b2a3525f3c6d0", "fields": {"value": "{\"name\": \"cache/0e/ba/0ebaa2e2cf696fd2511ce011746bd56e.jpg\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [300, 300]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||c587b4d7105b618f23d4497f30054ad9", "fields": {"value": "{\"name\": \"cache/8f/13/8f13eae7c6f9583bdf30b94d9ec6d65a.jpg\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [300, 300]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||e67215d2b49b61fc1f17c3bc7415f8c1", "fields": {"value": "{\"name\": \"cache/56/b8/56b81db9eb28b1bb7abc38f45dec6150.jpg\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [300, 300]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||image||f035848d750fce98c384a5af34c416b3", "fields": {"value": "{\"name\": \"cache/95/13/95134e856035ae443a31c13940e2ae1c.jpg\", \"storage\": \"django.core.files.storage.filesystem.FileSystemStorage\", \"size\": [300, 300]}"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||thumbnails||0710b840a8d4bd6808a122695bcc1284", "fields": {"value": "[\"f035848d750fce98c384a5af34c416b3\"]"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||thumbnails||2c2f381181cfdf98c05259a54f5e45a0", "fields": {"value": "[\"c587b4d7105b618f23d4497f30054ad9\"]"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||thumbnails||31ce81563bf79ee5031ccf888deeef31", "fields": {"value": "[\"bbcad553c1e2a348d58b2a3525f3c6d0\"]"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||thumbnails||3db8a1bc7c3b5eb9c9a200addd811092", "fields": {"value": "[\"864b602a2ef9a0aa66dbadf9cfa4a4ed\"]"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||thumbnails||3e3d9f80985fb97b94786fb2d5a2f785", "fields": {"value": "[\"e67215d2b49b61fc1f17c3bc7415f8c1\"]"}}, {"model": "thumbnail.kvstore", "pk": "sorl-thumbnail||thumbnails||7d537041a23511bd3eb1ead56f9b71a7", "fields": {"value": "[\"255304c1809b3183e2de30d5d0905a65\"]"}}] \ No newline at end of file diff --git a/CineSync/fixtures/films.json b/CineSync/fixtures/films.json new file mode 100644 index 0000000..4754377 --- /dev/null +++ b/CineSync/fixtures/films.json @@ -0,0 +1 @@ +[{"model": "films.genre", "pk": 1, "fields": {"name": "Боевик"}}, {"model": "films.genre", "pk": 2, "fields": {"name": "Комедия"}}, {"model": "films.genre", "pk": 3, "fields": {"name": "Драма"}}, {"model": "films.genre", "pk": 4, "fields": {"name": "Фантастика"}}, {"model": "films.genre", "pk": 5, "fields": {"name": "Ужасы"}}, {"model": "films.genre", "pk": 6, "fields": {"name": "Триллер"}}, {"model": "films.genre", "pk": 7, "fields": {"name": "Мелодрама"}}, {"model": "films.genre", "pk": 8, "fields": {"name": "Приключения"}}, {"model": "films.genre", "pk": 9, "fields": {"name": "Фэнтези"}}, {"model": "films.genre", "pk": 10, "fields": {"name": "Мистика"}}, {"model": "films.genre", "pk": 11, "fields": {"name": "Детектив"}}, {"model": "films.genre", "pk": 12, "fields": {"name": "Анимация"}}, {"model": "films.genre", "pk": 13, "fields": {"name": "Документальный"}}, {"model": "films.genre", "pk": 14, "fields": {"name": "Исторический"}}, {"model": "films.genre", "pk": 15, "fields": {"name": "Вестерн"}}, {"model": "films.director", "pk": 1, "fields": {"first_name": "Кристофер", "last_name": "Нолан"}}, {"model": "films.director", "pk": 2, "fields": {"first_name": "Стивен", "last_name": "Спилберг"}}, {"model": "films.director", "pk": 3, "fields": {"first_name": "Квентин", "last_name": "Тарантино"}}, {"model": "films.director", "pk": 4, "fields": {"first_name": "Мартин", "last_name": "Скорсезе"}}, {"model": "films.director", "pk": 5, "fields": {"first_name": "Дэвид", "last_name": "Финчер"}}, {"model": "films.director", "pk": 6, "fields": {"first_name": "Питер", "last_name": "Джексон"}}, {"model": "films.director", "pk": 7, "fields": {"first_name": "Ридли", "last_name": "Скотт"}}, {"model": "films.director", "pk": 8, "fields": {"first_name": "Джеймс", "last_name": "Кэмерон"}}, {"model": "films.director", "pk": 9, "fields": {"first_name": "Стэнли", "last_name": "Кубрик"}}, {"model": "films.director", "pk": 10, "fields": {"first_name": "Фрэнсис", "last_name": "Форд Коппола"}}, {"model": "films.director", "pk": 11, "fields": {"first_name": "Альфред", "last_name": "Хичкок"}}, {"model": "films.director", "pk": 12, "fields": {"first_name": "Джордж", "last_name": "Лукас"}}, {"model": "films.actor", "pk": 1, "fields": {"first_name": "Том", "last_name": "Хэнкс"}}, {"model": "films.actor", "pk": 2, "fields": {"first_name": "Леонардо", "last_name": "ДиКаприо"}}, {"model": "films.actor", "pk": 3, "fields": {"first_name": "Мэттью", "last_name": "МакКонахи"}}, {"model": "films.actor", "pk": 4, "fields": {"first_name": "Дензел", "last_name": "Вашингтон"}}, {"model": "films.actor", "pk": 5, "fields": {"first_name": "Брэд", "last_name": "Питт"}}, {"model": "films.actor", "pk": 6, "fields": {"first_name": "Мэрил", "last_name": "Стрип"}}, {"model": "films.actor", "pk": 7, "fields": {"first_name": "Натали", "last_name": "Портман"}}, {"model": "films.actor", "pk": 8, "fields": {"first_name": "Джонни", "last_name": "Депп"}}, {"model": "films.actor", "pk": 9, "fields": {"first_name": "Кейт", "last_name": "Бланшетт"}}, {"model": "films.actor", "pk": 10, "fields": {"first_name": "Энди", "last_name": "Серкис"}}, {"model": "films.actor", "pk": 11, "fields": {"first_name": "Сигурни", "last_name": "Уивер"}}, {"model": "films.actor", "pk": 12, "fields": {"first_name": "Кейт", "last_name": "Уинслет"}}, {"model": "films.country", "pk": 1, "fields": {"name": "США"}}, {"model": "films.country", "pk": 2, "fields": {"name": "Великобритания"}}, {"model": "films.country", "pk": 3, "fields": {"name": "Франция"}}, {"model": "films.country", "pk": 4, "fields": {"name": "Германия"}}, {"model": "films.country", "pk": 5, "fields": {"name": "Италия"}}, {"model": "films.country", "pk": 6, "fields": {"name": "Канада"}}, {"model": "films.country", "pk": 7, "fields": {"name": "Япония"}}, {"model": "films.country", "pk": 8, "fields": {"name": "Индия"}}, {"model": "films.country", "pk": 9, "fields": {"name": "Австралия"}}, {"model": "films.country", "pk": 10, "fields": {"name": "Россия"}}, {"model": "films.country", "pk": 11, "fields": {"name": "Китай"}}, {"model": "films.country", "pk": 12, "fields": {"name": "Испания"}}, {"model": "films.film", "pk": 1, "fields": {"name": "Звёздные войны: Эпизод IV – Новая надежда", "duration": 121, "release_date": "1977-05-25", "description": "В этом эпическом космическом приключении мы погружаемся в галактику, где воюют добро и зло, где герои сражаются за свободу и справедливость. В центре сюжета - молодой фермер Люк Скайуокер, который, вместе с джедаем Оби-Ван Кеноби и контрабандистом Ханом Соло, отправляется на поиски принцессы Леи Органы и борется против зловещей Империи. На их пути встречаются дроиды, воины, силы тьмы и света, а также искрометные персонажи, добавляющие юмора и динамики к захватывающим сражениям. В их руках судьба всей галактики, и только благородство и смелость помогут им одержать победу в этой эпической битве.", "image": "users/films/1/1713368662.3231936_123.jpeg", "age_limit": "16+", "genres": [4, 7], "directors": [1], "countries": [1], "actors": [1]}}, {"model": "films.film", "pk": 2, "fields": {"name": "Властелин колец: Братство Кольца", "duration": 178, "release_date": "2001-12-19", "description": "В таинственном мире Средиземья, где древние расы, волшебные существа и магия встречаются с судьбоносными событиями, начинается эпическое путешествие. Братство Кольца формируется из разношерстной группы существ, объединенных общей целью - уничтожить Кольцо Всевластия, созданное зловещим тёмным волшебником Сауроном.", "image": "users/films/2/1713368908.7703846_234rgt.jpeg", "age_limit": "12+", "genres": [4, 7], "directors": [1, 2], "countries": [1, 2], "actors": [1, 2]}}, {"model": "films.film", "pk": 3, "fields": {"name": "Зеленая миля", "duration": 189, "release_date": "1999-12-10", "description": "На территории тюрьмы \"Холодная гора\" посреди Луизианы разворачивается удивительная и трогательная история о доброте, милосердии и неожиданных чудесах. Повествование ведется от лица Пола Эджкомба, надзирателя блока смертников, который свидетельствует о загадочных событиях, происходящих с новым заключенным Джоном Коффи.", "image": "users/films/3/1713543113.7882318_442c52a2-10b9-4f36-9a65-26b42a1d8766-1.png", "age_limit": "12+", "genres": [3], "directors": [1, 2, 3], "countries": [2], "actors": [1, 2, 3]}}, {"model": "films.film", "pk": 4, "fields": {"name": "Форрест Гамп", "duration": 142, "release_date": "1994-06-23", "description": "В самом сердце Америки, в маленьком городке Гринбоу, Алабама, родился Форрест Гамп - обычный парень с необычным умом. Не смотря на свои невероятные способности, Форрест проживает непростую жизнь, полную неожиданных поворотов судьбы. Начиная с детства, его жизнь переплетается с ключевыми моментами истории Соединенных Штатов Америки во второй половине XX века: он становится свидетелем гражданского движения за гражданские права, участвует во Вьетнамской войне, становится спортсменом, успешным бизнесменом и даже участвует в политике. Однако, несмотря на свои достижения и опыт, для Форреста самым важным всегда остаются простые, но драгоценные моменты жизни, такие как любовь к друзьям и родным, верность и честность.", "image": "users/films/4/1713543167.6647074_abe76766-8ae4-468d-a897-65e42768b510-0.png", "age_limit": "12+", "genres": [3], "directors": [1, 2, 3, 4], "countries": [3], "actors": [1, 2, 3, 4]}}, {"model": "films.film", "pk": 5, "fields": {"name": "Побег из Шоушенка", "duration": 142, "release_date": "1994-09-10", "description": "\"Побег из Шоушенка\" - это потрясающая история о дружбе, надежде и невероятной силе человеческого духа. В центре сюжета - Энди Дюфрейн, обычный банкир, который был неправомерно осужден за убийство своей жены и ее любовника. Оказавшись в тюрьме Шоушенк, он сталкивается с жестокостью и несправедливостью системы, но не теряет надежды на свободу.", "image": "users/films/5/1713543228.7006924_edbd38b4-7bad-4d51-97a9-0c9d103db45f-3.png", "age_limit": "12+", "genres": [3], "directors": [1, 2, 3, 4, 5], "countries": [4], "actors": [1, 2, 3, 4, 5]}}, {"model": "films.film", "pk": 6, "fields": {"name": "Начало", "duration": 148, "release_date": "2010-07-16", "description": "История следует за Домиником Коббом, опытным вором секретов, специализирующимся на искусстве извлечения информации из чужих снов. Он обладает уникальной способностью проникать в подсознание других людей через их сновидения. Но его собственное прошлое таинственно связано с его же ночными кошмарами, которые преследуют его повсюду. Под руководством таинственного работодателя, Кобб собирает команду специалистов для выполнения невозможной миссии - не просто извлечь информацию из чужих снов, а внедрить ее туда. Однако их задача осложняется тем, что они должны создать иллюзию, которая была бы столь убедительной, что цель никогда бы не подозревала о вторжении.", "image": "users/films/6/1713369053.2213588_32b65bac-2ced-4ef0-ae71-6c246509c92a-1.png", "age_limit": "12+", "genres": [4, 5], "directors": [1, 2, 3, 4, 5, 6], "countries": [3], "actors": [1, 2, 3, 4, 5, 6]}}, {"model": "films.film", "pk": 7, "fields": {"name": "Матрица", "duration": 136, "release_date": "1999-03-31", "description": "В мире, овладевшем технологиями искусственного интеллекта, главный герой Нео, обычный программист, внезапно обнаруживает, что его жизнь - это лишь часть огромной виртуальной реальности, созданной машинами, чтобы удерживать человечество под контролем. После встречи с Морфеем, загадочным повстанцем, Нео вступает в борьбу за освобождение человечества от рабства Матрицы. Фильм исследует темы реальности, свободы и самоидентификации через потрясающие визуальные эффекты и захватывающие боевые сцены. Он предлагает зрителю глубокие размышления о том, что такое истинная реальность и как мы воспринимаем мир вокруг себя. \"Матрица\" оставляет зрителя с вопросами и вызовами, которые продолжают звучать в их сознании и после завершения просмотра.", "image": "users/films/7/1713544145.0738995_8e91bb66-fe37-42ad-a32a-40fc522833da-3.png", "age_limit": "12+", "genres": [4], "directors": [1, 2, 3, 4, 5, 6, 7], "countries": [1], "actors": [1, 2, 3, 4, 5, 6, 7]}}, {"model": "films.film", "pk": 8, "fields": {"name": "Властелин колец: Возвращение Короля", "duration": 201, "release_date": "2003-12-17", "description": "После разрушения Фордора, Голлума и Саурона, Фродо и Сэм продолжают свой путь к Роковой Горе, где им предстоит уничтожить Кольцо Всевластия. В это время, Арагорн собирает армию для сражения с орками и Сауроном, чтобы защитить Гондор и подготовиться к финальной битве за Средиземье. \"Возвращение Короля\" пропитана эпической борьбой за выживание и свободу. Фильм исследует темы дружбы, преданности, смелости и жертвы, а также показывает, что даже в самые темные времена есть место для надежды. Визуальные эффекты, масштабные сражения и глубокие персонажи делают этот фильм одним из самых впечатляющих произведений в жанре фэнтези.", "image": "users/films/8/1713544180.4629092_b368a241-0d61-4edd-8c9e-2cb2641ad5e8-3.png", "age_limit": "12+", "genres": [4, 7], "directors": [1, 2, 3, 4, 5, 6, 7, 8], "countries": [2], "actors": [1, 2, 3, 4, 5, 6, 7, 8]}}, {"model": "films.film", "pk": 9, "fields": {"name": "Интерстеллар", "duration": 169, "release_date": "2014-11-06", "description": "Сюжет разворачивается в будущем, когда Земля столкнулась с катастрофическими изменениями климата, и человечество стоит перед угрозой вымирания. Основная история следует за бывшим пилотом и инженером, который присоединяется к экспедиции, отправленной на поиски новых обитаемых планет в других галактиках. Группе исследователей предстоит пройти через червоточины, где время и пространство искажены, чтобы найти подходящую планету для переселения человечества.", "image": "users/films/9/1713541295.0377595_4f5c7334-2e7d-41fe-8bad-8ebe063619ff-0.png", "age_limit": "12+", "genres": [3, 4], "directors": [9], "countries": [9], "actors": [1, 2]}}, {"model": "films.film", "pk": 10, "fields": {"name": "1+1", "duration": 112, "release_date": "2011-11-02", "description": "В центре сюжета - история о дружбе между богатым аристократом по имени Филиппом и бывшим заключенным по имени Дрисс. Филипп, парализованный после несчастного случая, нанимает Дрисса в качестве своего помощника, и отношения между ними развиваются в неожиданном направлении. Фильм основан на реальных событиях и рассказывает о том, как дружба и взаимопонимание могут преодолеть любые преграды.", "image": "users/films/10/1713541381.6086452_01d07777-f746-4817-af5d-9c560cd63549-1.png", "age_limit": "12+", "genres": [3, 8], "directors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "countries": [4], "actors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}}, {"model": "films.film", "pk": 11, "fields": {"name": "Криминальное чтиво", "duration": 154, "release_date": "1994-09-10", "description": "Фильм состоит из нескольких переплетённых историй, события которых происходят в мире преступности Лос-Анджелеса. Он известен своими острыми диалогами, насыщенным сюжетом и характерами, а также нестандартной структурой повествования. \"Криминальное чтиво\" получило признание критиков и зрителей и стал одним из самых известных фильмов в жанре криминальной драмы.", "image": "users/films/11/1713541432.8553054_fef1edb1-fae7-47f9-a7fb-2dd76702f79b-0.png", "age_limit": "12+", "genres": [5], "directors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "countries": [6], "actors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]}}, {"model": "films.film", "pk": 12, "fields": {"name": "Король Лев", "duration": 88, "release_date": "1994-06-15", "description": "Фильм рассказывает историю льва по имени Симба, который пытается восстановить порядок в своём царстве, Скопа. Он сражается с амбициозным дядей Скаром, который хочет захватить власть. Фильм пользуется огромной популярностью благодаря своей потрясающей анимации, захватывающему сюжету, запоминающимся персонажам и незабываемой музыке.", "image": "users/films/12/1713541342.7425854_795d7b75-dcf8-444e-a022-902c77e397a4-0.png", "age_limit": "12+", "genres": [7], "directors": [1, 2], "countries": [1], "actors": [1, 2, 12]}}, {"model": "films.film", "pk": 13, "fields": {"name": "Бойцовский клуб", "duration": 139, "release_date": "1999-10-15", "description": "Главный герой, невыразительный и безымянный, ищет смысл в своей жизни и находит его в необычной форме бойцовского клуба, который он создает совместно с эксцентричным и загадочным Тайлером Дерденом. В этом клубе люди с разных социальных слоев сражаются друг с другом без правил и страха перед смертью, погружаясь в адреналин и экстремальные эмоции. По мере развития сюжета, бойцовский клуб превращается во что-то большее, чем просто место битвы - это символическое выражение бунта против общественных ограничений и потребности в аутентичности и свободе.", "image": "users/films/13/1713544379.7713618_7f9212dd-f60f-4faf-bcce-d981f68a55ee-3.png", "age_limit": "12+", "genres": [5, 6], "directors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "countries": [1], "actors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]}}, {"model": "films.film", "pk": 14, "fields": {"name": "Темный рыцарь", "duration": 152, "release_date": "2008-07-18", "description": "Когда преступная деятельность достигает новых высот, Бэтмен вынужден взять на себя более сложные и опасные вызовы, чем когда-либо прежде. Появление безумного и непредсказуемого Джокера заставляет Бэтмена столкнуться с моральными дилеммами и темными сторонами своей личности. В то время как Джокер пытается раскачать Готэм до своих основ, Бэтмен сталкивается с выбором между сохранением своих принципов и борьбой с тем, кем он стал. \"Темный рыцарь\" исследует тему коррупции, моральной амбивалентности и цены, которую приходится платить за спасение города.", "image": "users/films/14/1713544502.0631104_d16a314e-d7fe-419b-a1f0-2d178555df04-2.png", "age_limit": "18+", "genres": [5, 6], "directors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "countries": [5], "actors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]}}, {"model": "films.film", "pk": 15, "fields": {"name": "Гладиатор", "duration": 155, "release_date": "2000-05-01", "description": "\"Гладиатор\" рассказывает историю о Максимусе Дециме Меридии, генерале римской армии, который становится рабом и гладиатором после убийства своей семьи императором Коммодом. Продолжая жить, чтобы мстить за своих близких, Максимус становится легендарным воином в колизее, завоевывая публичное признание и поддержку народа. В то время как он борется в арене, его стремления к мести сталкиваются с политическими интригами и внутренними борьбами в самой Римской империи. Фильм исследует темы предательства, чести, мести и выживания в безжалостном мире древнего Рима.", "image": "users/films/15/1713544664.7472544_ec3eb969-5c80-4881-bda5-8b94f1c1912f-2.png", "age_limit": "12+", "genres": [6], "directors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "countries": [8], "actors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]}}, {"model": "films.film", "pk": 16, "fields": {"name": "Пираты Карибского моря: Проклятие Черной жемчужины", "duration": 143, "release_date": "2003-07-09", "description": "\"Пираты Карибского моря: Проклятие Черной жемчужины\" рассказывает о приключениях капитана Джека Воробья, коварного пирата с непредсказуемым характером, и Уилла Тернера, молодого и решительного парня, влюбленного в дочь губернатора Элизабет Суонн. Их пути пересекаются, когда на Карибских островах начинают происходить загадочные и жуткие события, связанные с проклятием Черной жемчужины. Этот жемчужный корабль, за которым охотится капитан Гектор Барбосса, проклят самими пиратами, ставшими зомби-привидениями, и обречен на бесконечный поиск азартного капитана Джека. Вместе с командой непредсказуемых пиратов, Джек и Уилл сражаются за свою свободу и противостоят зловещему проклятию, раскрывая тайны и взаимоотношения, которые определяют судьбу каждого из них.", "image": "users/films/16/1713541511.347371_a2b8a910-efa7-42ba-a1ae-af7f7e28275f-0.png", "age_limit": "12+", "genres": [7], "directors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "countries": [7], "actors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]}}, {"model": "films.film", "pk": 17, "fields": {"name": "Хороший, плохой, злой", "duration": 161, "release_date": "1966-12-23", "description": "Главный сюжет фильма закручивается вокруг карты, указывающей местонахождение золота, спрятанного в кладовой. Каждый из главных героев стремится обладать этой картой: \"Блондин\" - для своей личной выгоды, \"Ангел Грязи\" - чтобы выиграть награду за арест \"Блондина\", а \"Сент-Джон\" - чтобы освободить своего брата из тюрьмы. Их пути пересекаются их цели, и они вынуждены объединиться, чтобы пережить враждебные ситуации и сразиться с врагами.", "image": "users/films/17/1713544710.222768_9e7136e9-5100-493c-ad9d-4767c9e8ad47-0.png", "age_limit": "12+", "genres": [2, 8], "directors": [1], "countries": [1], "actors": [1, 3, 4, 5, 6]}}, {"model": "films.film", "pk": 18, "fields": {"name": "Леон", "duration": 110, "release_date": "1994-09-14", "description": "\"Леон\" - это драматический триллер, рассказывающий о необычной дружбе между профессиональным наемным убийцей по прозвищу Леоном и девятилетней девочкой по имени Матильда. Сюжет разворачивается в темных улицах Нью-Йорка и следует за этой парой, когда они пытаются выжить в опасном мире преступности и коррупции. Матильда оказывается в зоне риска после того, как ее семья убивается наемным убийцей по имени Стансфилд, нанятым местным наркобароном. После убийства семьи Матильда обращается к Леону за помощью, и он соглашается защищать ее от опасности. В процессе их взаимодействия Леон начинает обучать Матильду искусству убийства, чтобы она могла отомстить за свою семью.", "image": "users/films/18/1713704966.6581967_e02f5f83-43ff-437f-97e8-0b113a6e3193-3.png", "age_limit": "18+", "genres": [6, 9], "directors": [9, 10], "countries": [8, 9], "actors": [1, 2, 12]}}, {"model": "films.film", "pk": 19, "fields": {"name": "Терминатор 2: Судный день", "duration": 137, "release_date": "1991-07-03", "description": "Главный герой Джон Коннор, который в будущем станет лидером сопротивления против машин, на этот раз оказывается в опасной ситуации, когда наемный киборг, известный как Т-800, отправляется в прошлое, чтобы защитить его от продвинутой модели Т-1000, которая была послана Skynet для его уничтожения.", "image": "users/films/19/1713704895.4999862_f5b50439-09d6-4df7-a807-39eed10e1b0b-2.png", "age_limit": "18+", "genres": [4, 9], "directors": [4], "countries": [6], "actors": [4]}}, {"model": "films.film", "pk": 20, "fields": {"name": "ВАЛЛ·И", "duration": 98, "release_date": "2008-06-27", "description": "Главный герой, робот ВАЛЛ·И, одиноко работает на Земле, очищая поверхность от отходов. Он обнаруживает свою одиночество и мечтает о дружбе. Все меняется, когда на Землю прилетает космический корабль с роботом по имени Ива, который был отправлен исследовать планету на предмет пригодности для жизни.", "image": "users/films/20/1713704791.52796_41c9fae6-f411-40fe-b13a-6f81a0b89b74-3.png", "age_limit": "12+", "genres": [1, 4], "directors": [1, 12], "countries": [1], "actors": [5]}}, {"model": "films.film", "pk": 21, "fields": {"name": "Джанго освобожденный", "duration": 165, "release_date": "2012-12-25", "description": "Сюжет разворачивается в американском Южном штате за два года до начала Гражданской войны. Главный герой, Джанго, - бывший раб, который в результате цепочки событий оказывается вместе с охотником за головами по имени Шульц в роли помощника. Шульц обещает освободить Джанго, если тот поможет ему поймать нескольких преступников. По мере развития сюжета Джанго осваивается с ролью охотника за головами и преследует свою собственную цель - освободить свою жену из рабства.", "image": "users/films/21/1713704828.549848_2c851cbf-ac2f-4206-869f-744697442eae-1.png", "age_limit": "12+", "genres": [6], "directors": [1], "countries": [1, 12], "actors": [2, 4]}}, {"model": "films.film", "pk": 22, "fields": {"name": "Исчезнувшая", "duration": 145, "release_date": "2014-10-02", "description": "Сюжет фильма следует за главными героями, Келли и Беном, чья младшая дочь Ника исчезает во время поездки по штатам. По мере того как они начинают искать девочку и разгадывать тайну ее исчезновения, становится очевидно, что это событие связано с мрачным и опасным прошлым, о котором они даже не подозревали. С каждым шагом родители погружаются во все более запутанный заговор, который угрожает разрушить все, что они знают, и подвергает их собственные жизни величайшей опасности.", "image": "users/films/22/1713704586.6632185_954261ed-9a2f-4d80-a42d-a230d8dd9982-2.png", "age_limit": "18+", "genres": [6], "directors": [6, 7], "countries": [11], "actors": [6, 8]}}, {"model": "films.film", "pk": 23, "fields": {"name": "Храброе сердце", "duration": 177, "release_date": "1995-09-08", "description": "Сюжет фильма рассказывает историю Уильяма Уоллеса, шотландского национального героя, который возглавил восстание против английского короля Эдварда I в XIII веке. Главный герой, Уильям Уоллес, становится символом свободы для шотландского народа, который страдает от тирании английских захватчиков. Он ведет свой народ в борьбе за независимость и освобождение от угнетения. В ходе своего пути он объединяет разрозненные кланы и воины в борьбе против англичан, демонстрируя необыкновенное мужество, решимость и преданность своей стране.", "image": "users/films/23/1713704535.70412_30f0721a-360b-458b-8cb7-41d4d96a741f-1.png", "age_limit": "16+", "genres": [6], "directors": [4, 5, 6, 7], "countries": [2], "actors": [12]}}, {"model": "films.film", "pk": 24, "fields": {"name": "Гарри Поттер и Философский камень", "duration": 152, "release_date": "2001-11-16", "description": "В фильме рассказывается о приключениях Гарри Поттера, который обнаруживает, что он - сирота, но волшебник, и отправляется в Хогвартс, школу магии и волшебства. Сюжет фильма начинается с того, как Гарри Поттер живет у своих тети и дяди, которые ненавидят его. Внезапно для него приходит письмо, приглашающее его поступить в Хогвартс, где он узнает о своем настоящем происхождении и удивительных способностях.", "image": "users/films/24/1713704445.330757_c9b1108f-e067-455c-9052-ea142d23af40-3.png", "age_limit": "12+", "genres": [7, 9], "directors": [5, 12], "countries": [2], "actors": [5, 6, 7, 8, 9, 10, 11, 12]}}, {"model": "films.film", "pk": 25, "fields": {"name": "Индиана Джонс: В поисках утраченного ковчега", "duration": 115, "release_date": "1981-06-12", "description": "Индиана Джонс отправляется в опасное приключение в поисках древнего артефакта - ковчега завета. Сюжет фильма разворачивается в 1936 году, когда Индиана Джонс нанимается правительством США, чтобы найти ковчег, который, по легенде, содержит силу божью и может дать своему обладателю неограниченную власть.", "image": "users/films/25/1713704306.6897957_eea49eb9-a08c-474c-963d-e967be28c21f-1.png", "age_limit": "12+", "genres": [6, 7], "directors": [1, 8, 9, 10], "countries": [1], "actors": [6]}}, {"model": "films.film", "pk": 26, "fields": {"name": "Красота по-американски", "duration": 122, "release_date": "1999-09-08", "description": "История разворачивается в тихом американском пригороде, где каждый день кажется рутинным и однообразным. В этой обыденной жизни мы встречаем обычную американскую семью - отца, мать и двух детей. Хотя на первый взгляд их повседневная жизнь кажется обычной, каждый из членов семьи сталкивается с собственными внутренними борьбами и трудностями. Отец, мечтающий о большем, сталкивается с давлением общества и собственных амбиций. Мать, пытающаяся сохранить гармонию в семье, ищет красоту в повседневных моментах. Дети, погруженные в мир собственных проблем и поиска своего места в жизни, сталкиваются с первой любовью и разочарованиями.", "image": "users/films/26/1713704243.7448034_45917da8-35eb-4d8d-bde5-1ee548045775-2.png", "age_limit": "12+", "genres": [2, 8], "directors": [7, 8], "countries": [1, 3], "actors": [1, 10, 11, 12]}}] \ No newline at end of file diff --git a/CineSync/fixtures/timetable.json b/CineSync/fixtures/timetable.json new file mode 100644 index 0000000..bf469f6 --- /dev/null +++ b/CineSync/fixtures/timetable.json @@ -0,0 +1 @@ +[{"model": "timetable.auditorium", "pk": 1, "fields": {"number": "Зал 1"}}, {"model": "timetable.auditorium", "pk": 2, "fields": {"number": "Зал 2"}}, {"model": "timetable.auditorium", "pk": 3, "fields": {"number": "Зал 3"}}, {"model": "timetable.auditorium", "pk": 4, "fields": {"number": "Зал 4"}}, {"model": "timetable.auditorium", "pk": 5, "fields": {"number": "Зал 5"}}, {"model": "timetable.auditorium", "pk": 6, "fields": {"number": "Зал 6"}}, {"model": "timetable.auditorium", "pk": 7, "fields": {"number": "Зал 7"}}, {"model": "timetable.row", "pk": 1, "fields": {"row_number": 1, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 2, "fields": {"row_number": 2, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 3, "fields": {"row_number": 3, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 4, "fields": {"row_number": 4, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 5, "fields": {"row_number": 5, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 6, "fields": {"row_number": 6, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 7, "fields": {"row_number": 7, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 8, "fields": {"row_number": 8, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 9, "fields": {"row_number": 9, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 10, "fields": {"row_number": 10, "column_count": 10, "auditorium": 1}}, {"model": "timetable.row", "pk": 11, "fields": {"row_number": 1, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 12, "fields": {"row_number": 2, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 13, "fields": {"row_number": 3, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 14, "fields": {"row_number": 4, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 15, "fields": {"row_number": 5, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 16, "fields": {"row_number": 6, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 17, "fields": {"row_number": 7, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 18, "fields": {"row_number": 8, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 19, "fields": {"row_number": 9, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 20, "fields": {"row_number": 10, "column_count": 10, "auditorium": 2}}, {"model": "timetable.row", "pk": 21, "fields": {"row_number": 1, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 22, "fields": {"row_number": 2, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 23, "fields": {"row_number": 3, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 24, "fields": {"row_number": 4, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 25, "fields": {"row_number": 5, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 26, "fields": {"row_number": 6, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 27, "fields": {"row_number": 7, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 28, "fields": {"row_number": 8, "column_count": 10, "auditorium": 3}}, {"model": "timetable.row", "pk": 31, "fields": {"row_number": 1, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 32, "fields": {"row_number": 2, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 33, "fields": {"row_number": 3, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 34, "fields": {"row_number": 4, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 35, "fields": {"row_number": 5, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 36, "fields": {"row_number": 6, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 37, "fields": {"row_number": 7, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 38, "fields": {"row_number": 8, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 39, "fields": {"row_number": 9, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 40, "fields": {"row_number": 10, "column_count": 10, "auditorium": 4}}, {"model": "timetable.row", "pk": 41, "fields": {"row_number": 1, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 42, "fields": {"row_number": 2, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 43, "fields": {"row_number": 3, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 44, "fields": {"row_number": 4, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 45, "fields": {"row_number": 5, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 46, "fields": {"row_number": 6, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 47, "fields": {"row_number": 7, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 48, "fields": {"row_number": 8, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 49, "fields": {"row_number": 9, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 50, "fields": {"row_number": 10, "column_count": 10, "auditorium": 5}}, {"model": "timetable.row", "pk": 51, "fields": {"row_number": 1, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 52, "fields": {"row_number": 2, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 53, "fields": {"row_number": 3, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 54, "fields": {"row_number": 4, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 55, "fields": {"row_number": 5, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 56, "fields": {"row_number": 6, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 57, "fields": {"row_number": 7, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 58, "fields": {"row_number": 8, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 59, "fields": {"row_number": 9, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 60, "fields": {"row_number": 10, "column_count": 10, "auditorium": 6}}, {"model": "timetable.row", "pk": 61, "fields": {"row_number": 1, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 62, "fields": {"row_number": 2, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 63, "fields": {"row_number": 3, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 64, "fields": {"row_number": 4, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 65, "fields": {"row_number": 5, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 66, "fields": {"row_number": 6, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 67, "fields": {"row_number": 7, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 68, "fields": {"row_number": 8, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 69, "fields": {"row_number": 9, "column_count": 10, "auditorium": 7}}, {"model": "timetable.row", "pk": 70, "fields": {"row_number": 10, "column_count": 10, "auditorium": 7}}] \ No newline at end of file diff --git a/CineSync/home/views.py b/CineSync/home/views.py index 32412bf..e67e464 100644 --- a/CineSync/home/views.py +++ b/CineSync/home/views.py @@ -5,31 +5,12 @@ from django.http import HttpResponse from django.shortcuts import render from films.models import Film -from timetable.models import FilmSession +from core.functions import get_film_to_sessions def homepage(request): films = Film.objects.on_main() - film_sessions = FilmSession.objects.nearest_timetable() - sessions_by_date_and_film = {} - - for session in film_sessions: - session_date = session.start_datetime.date() - if session_date not in sessions_by_date_and_film: - sessions_by_date_and_film[session_date] = {} - - film_sessions_for_date = sessions_by_date_and_film[session_date] - if session.film not in film_sessions_for_date: - film_sessions_for_date[session.film] = [] - - film_sessions_for_date[session.film].append(session) - - for session_date, session_films in sessions_by_date_and_film.items(): - for session_film in session_films: - sessions_by_date_and_film[session_date][session_film].sort( - key=lambda sorted_session: sorted_session.start_datetime, - ) - + sessions_by_date_and_film = get_film_to_sessions() template = render( request, 'home/homepage.html', diff --git a/CineSync/static/css/home/homepage.css b/CineSync/static/css/home/homepage.css index 216fc4d..9f03fe1 100644 --- a/CineSync/static/css/home/homepage.css +++ b/CineSync/static/css/home/homepage.css @@ -24,5 +24,5 @@ .film_card_column::-webkit-scrollbar-thumb { background-color: #0d1d3a; border-radius: 5vw; - border: 1px solid #ffffff; + border: 1px solid #eaeaea; } \ No newline at end of file diff --git a/CineSync/static/css/style.css b/CineSync/static/css/style.css index 3cd79b5..2ef0387 100644 --- a/CineSync/static/css/style.css +++ b/CineSync/static/css/style.css @@ -95,4 +95,11 @@ body::-webkit-scrollbar-thumb { flex-wrap: nowrap; justify-content: center; align-items: center; +} +.not_found_label { + width: 100%; + color: #eaeaea; + text-align: center; + font-size: 2vw; + margin-top: 10vw; } \ No newline at end of file diff --git a/CineSync/static/css/users/profile.css b/CineSync/static/css/users/profile.css index e728653..f6571b5 100644 --- a/CineSync/static/css/users/profile.css +++ b/CineSync/static/css/users/profile.css @@ -20,4 +20,9 @@ } .btn { margin: 5px !important; +} +.user_image { + width: 20vw; + border-radius: 2vw; + margin-bottom: 1.5vw; } \ No newline at end of file diff --git a/CineSync/templates/films/films_list.html b/CineSync/templates/films/films_list.html index f712878..0172f7b 100644 --- a/CineSync/templates/films/films_list.html +++ b/CineSync/templates/films/films_list.html @@ -8,10 +8,11 @@
Кажется, вы еще не оформили ни одного заказа 🤔
+ {% endif %}Информации о расписании не найдена :(
+ {% endif %} {% endblock %} \ No newline at end of file diff --git a/CineSync/templates/users/profile.html b/CineSync/templates/users/profile.html index 960e093..43afd62 100644 --- a/CineSync/templates/users/profile.html +++ b/CineSync/templates/users/profile.html @@ -38,6 +38,9 @@{{ message }}
diff --git a/CineSync/tickets/migrations/0008_alter_order_options_alter_ticket_options.py b/CineSync/tickets/migrations/0008_alter_order_options_alter_ticket_options.py new file mode 100644 index 0000000..e2f7717 --- /dev/null +++ b/CineSync/tickets/migrations/0008_alter_order_options_alter_ticket_options.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2 on 2024-04-26 04:15 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('tickets', '0002_initial_squashed_0007_alter_order_datetime_order'), + ] + + operations = [ + migrations.AlterModelOptions( + name='order', + options={'verbose_name': 'заказ', 'verbose_name_plural': 'Заказы'}, + ), + migrations.AlterModelOptions( + name='ticket', + options={'verbose_name': 'билет', 'verbose_name_plural': 'Билеты'}, + ), + ] diff --git a/CineSync/tickets/models.py b/CineSync/tickets/models.py index 61e2857..cb391a0 100644 --- a/CineSync/tickets/models.py +++ b/CineSync/tickets/models.py @@ -42,7 +42,7 @@ class Order(Model): class Meta: db_table = 'tickets_orders' - verbose_name = 'Заказ' + verbose_name = 'заказ' verbose_name_plural = 'Заказы' @@ -72,5 +72,5 @@ class Ticket(Model): class Meta: db_table = 'tickets_tickets' - verbose_name = 'Билет' + verbose_name = 'билет' verbose_name_plural = 'Билеты' diff --git a/CineSync/timetable/migrations/0007_alter_auditorium_options_alter_filmsession_options_and_more.py b/CineSync/timetable/migrations/0007_alter_auditorium_options_alter_filmsession_options_and_more.py new file mode 100644 index 0000000..83397c6 --- /dev/null +++ b/CineSync/timetable/migrations/0007_alter_auditorium_options_alter_filmsession_options_and_more.py @@ -0,0 +1,37 @@ +# Generated by Django 4.2 on 2024-04-26 04:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ( + 'timetable', + '0002_rename_rows_row_filmsession_squashed_0006_remove_auditorium_row_count', + ), + ] + + operations = [ + migrations.AlterModelOptions( + name='auditorium', + options={'verbose_name': 'зал', 'verbose_name_plural': 'Залы'}, + ), + migrations.AlterModelOptions( + name='filmsession', + options={'verbose_name': 'сеанс', 'verbose_name_plural': 'Сеансы'}, + ), + migrations.AlterModelOptions( + name='row', + options={'verbose_name': 'место', 'verbose_name_plural': 'Места'}, + ), + migrations.AlterField( + model_name='filmsession', + name='end_datetime', + field=models.DateTimeField( + blank=True, + null=True, + verbose_name='Дата и время окончания сеанса', + ), + ), + ] diff --git a/CineSync/timetable/models.py b/CineSync/timetable/models.py index ffacdc9..f84f2d9 100644 --- a/CineSync/timetable/models.py +++ b/CineSync/timetable/models.py @@ -50,7 +50,7 @@ class Auditorium(Model): class Meta: db_table = 'timetable_auditoriums' - verbose_name = 'Зал' + verbose_name = 'зал' verbose_name_plural = 'Залы' @@ -79,7 +79,7 @@ class Row(Model): class Meta: db_table = 'timetable_rows' - verbose_name = 'Место' + verbose_name = 'место' verbose_name_plural = 'Места' @@ -134,5 +134,5 @@ class FilmSession(Model): class Meta: db_table = 'timetable_film_sessions' - verbose_name = 'Сеанс' + verbose_name = 'сеанс' verbose_name_plural = 'Сеансы' diff --git a/CineSync/timetable/views.py b/CineSync/timetable/views.py index 7072d6c..1e89c9e 100644 --- a/CineSync/timetable/views.py +++ b/CineSync/timetable/views.py @@ -15,23 +15,20 @@ from timetable.models import FilmSession def timetable_view(request): film_sessions = FilmSession.objects.all_timetable() + sessions_by_date_and_film = {} for session in film_sessions: session_date = session.start_datetime.date() - if session_date not in sessions_by_date_and_film: - sessions_by_date_and_film[session_date] = {} + session_film = session.film + sessions_by_date_and_film.setdefault(session_date, {}).setdefault( + session_film, [] + ).append(session) - film_sessions_for_date = sessions_by_date_and_film[session_date] - if session.film not in film_sessions_for_date: - film_sessions_for_date[session.film] = [] - - film_sessions_for_date[session.film].append(session) - - for session_date, session_films in sessions_by_date_and_film.items(): - for session_film in session_films: + for session_date in sessions_by_date_and_film: + for session_film in sessions_by_date_and_film[session_date]: sessions_by_date_and_film[session_date][session_film].sort( - key=lambda sorted_session: sorted_session.start_datetime, + key=lambda x: x.start_datetime ) template = render( diff --git a/CineSync/users/forms.py b/CineSync/users/forms.py index 485f5d0..967411e 100644 --- a/CineSync/users/forms.py +++ b/CineSync/users/forms.py @@ -53,6 +53,17 @@ class SignUpForm(UserCreationForm): class Meta(UserCreationForm.Meta): fields = ('username', 'email') + def clean_username(self): + username = self.cleaned_data['username'] + if len(username) > 150: + raise forms.ValidationError('Максимальная длина 150 символов.') + if not all(char.isalnum() or char in '@/./+/-/_' for char in username): + raise forms.ValidationError( + 'Можно использовать только буквы, цифры и символы @/./+/-/_.' + ) + + return username + class ProfileForm(ModelForm): def __init__(self, *args, **kwargs) -> None: @@ -99,3 +110,14 @@ class UserForm(forms.ModelForm): model.first_name.field.name, model.last_name.field.name, ] + + def clean_username(self): + username = self.cleaned_data['username'] + if len(username) > 150: + raise forms.ValidationError('Максимальная длина 150 символов.') + if not all(char.isalnum() or char in '@/./+/-/_' for char in username): + raise forms.ValidationError( + 'Можно использовать только буквы, цифры и символы @/./+/-/_.' + ) + + return username diff --git a/CineSync/users/migrations/0004_alter_profile_options.py b/CineSync/users/migrations/0004_alter_profile_options.py new file mode 100644 index 0000000..76ad28c --- /dev/null +++ b/CineSync/users/migrations/0004_alter_profile_options.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2 on 2024-04-26 04:15 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0003_remove_profile_genres_profile_genres'), + ] + + operations = [ + migrations.AlterModelOptions( + name='profile', + options={ + 'verbose_name': 'данные пользователя', + 'verbose_name_plural': 'Данные пользователей', + }, + ), + ] diff --git a/CineSync/users/models.py b/CineSync/users/models.py index 6d0a662..9cdbc02 100644 --- a/CineSync/users/models.py +++ b/CineSync/users/models.py @@ -74,6 +74,6 @@ class Profile(Model): list_display = ['image_tmb'] class Meta: - verbose_name = 'Данные пользователя' + verbose_name = 'данные пользователя' verbose_name_plural = 'Данные пользователей' db_table = 'users_profiles' diff --git a/ER.png b/ER.png index 4538a08..04b69b6 100644 Binary files a/ER.png and b/ER.png differ diff --git a/README.md b/README.md index ac6228f..4a780ba 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,16 @@ авторизации, редактирования профиля. Сайт расположен по адресу: https://cinesync.numerum.site/ +## Перед запуском + +Необходимо также задать переменные окружения, для этого нужно создать файл `.env`, и указать там необходимые переменны, +ознакомится с ними можно в [примере файла](.example_env). + +## Обратите внимание + +Проект предусматривает возможность запуска проекта, как на sqlite, так и на postgres. В зависимости от этого нужно +устанавливать разные зависимости (ниже описаны какие) и задавать разные переменные окружения. + ## Инструкция к локальному запуску 1) Скачать проект или склонировать репозиторий: @@ -44,16 +54,21 @@ pip3 install -r requirements/test.txt ``` - - Для продакшена: + - Для продакшена на sqlite: ```bash - pip3 install -r requirements/prod.txt + pip3 install -r requirements/base.txt ``` + - Для продакшена на postgres: + + ```bash + pip3 install -r requirements/prod.txt + ``` + 5) Применить миграции: ```bash - python3 manage.py makemigrations python3 manage.py migrate ``` diff --git a/requirements/base.txt b/requirements/base.txt new file mode 100644 index 0000000..ec20c50 --- /dev/null +++ b/requirements/base.txt @@ -0,0 +1,6 @@ +Django==4.2 +django-ckeditor==6.7.0 +django-cleanup==8.1.0 +pillow==10.2.0 +python-dotenv~=1.0.1 +sorl-thumbnail==12.10.0 \ No newline at end of file diff --git a/requirements/dev.txt b/requirements/dev.txt index 41da87c..b92ab51 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,3 +1,3 @@ --r prod.txt +-r base.txt black==24.1.1 django-debug-toolbar==4.3.0 \ No newline at end of file diff --git a/requirements/prod.txt b/requirements/prod.txt index 5e312ff..66a81ca 100644 --- a/requirements/prod.txt +++ b/requirements/prod.txt @@ -1,7 +1,2 @@ -Django==4.2 -django-ckeditor==6.7.0 -django-cleanup==8.1.0 -pillow==10.2.0 -python-dotenv~=1.0.1 -sorl-thumbnail==12.10.0 +-r base.txt psycopg2-binary==2.9.1 \ No newline at end of file diff --git a/requirements/test.txt b/requirements/test.txt index 81e20aa..866468d 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,4 +1,4 @@ --r prod.txt +-r base.txt flake8==7.0.0 flake8-bugbear==24.2.6 flake8-clean-block==0.1.2 diff --git a/Документы/Текст к презентации.docx b/Документы/Текст к презентации.docx new file mode 100644 index 0000000..1ea13b5 Binary files /dev/null and b/Документы/Текст к презентации.docx differ