оптимизировал запросы
This commit is contained in:
parent
79b88a26bf
commit
8c8b95e839
@ -17,6 +17,12 @@
|
|||||||
<a class="nav-link {% if view_name == 'time_table:main' %} active {% endif %}"
|
<a class="nav-link {% if view_name == 'time_table:main' %} active {% endif %}"
|
||||||
href="{% url 'time_table:main' %}">Расписание</a>
|
href="{% url 'time_table:main' %}">Расписание</a>
|
||||||
</li>
|
</li>
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link {% if view_name == 'tickets:my_orders' %} active {% endif %}"
|
||||||
|
href="{% url 'tickets:my_orders' %}">Мои заказы</a>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
9
CineSync/templates/tickets/my_orders.html
Normal file
9
CineSync/templates/tickets/my_orders.html
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% load static %}
|
||||||
|
{% load tags %}
|
||||||
|
{% block title %}
|
||||||
|
Мои заказы
|
||||||
|
{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@ -1,10 +1,11 @@
|
|||||||
from django.urls import path
|
from django.urls import path
|
||||||
|
|
||||||
from tickets.views import ticket_view, order_success
|
from tickets.views import ticket_view, order_success, my_orders
|
||||||
|
|
||||||
app_name = 'tickets'
|
app_name = 'tickets'
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', ticket_view, name='tickets'),
|
path('', ticket_view, name='tickets'),
|
||||||
path('order/success', order_success, name='order_success'),
|
path('order/success', order_success, name='order_success'),
|
||||||
|
path('my/', my_orders, name='my_orders')
|
||||||
]
|
]
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.shortcuts import render, get_object_or_404
|
from django.shortcuts import render, get_object_or_404
|
||||||
|
|
||||||
|
from tickets.models import Order, Ticket
|
||||||
|
|
||||||
|
|
||||||
def ticket_view(request):
|
def ticket_view(request):
|
||||||
return render(request, 'tickets/ticket_buy.html')
|
return render(request, 'tickets/ticket_buy.html')
|
||||||
@ -7,3 +10,16 @@ def ticket_view(request):
|
|||||||
|
|
||||||
def order_success(request):
|
def order_success(request):
|
||||||
return render(request, 'tickets/order_success.html')
|
return render(request, 'tickets/order_success.html')
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def my_orders(request):
|
||||||
|
user = request.user
|
||||||
|
orders = get_object_or_404(
|
||||||
|
Order.objects.filter(
|
||||||
|
profile__id=user.profile.id,
|
||||||
|
).prefetch_related(
|
||||||
|
'tickets',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return render(request, 'tickets/my_orders.html')
|
||||||
|
|||||||
@ -26,7 +26,12 @@ class FilmSessionsManager(Manager):
|
|||||||
|
|
||||||
def all_timetable(self):
|
def all_timetable(self):
|
||||||
current_datetime = timezone.now()
|
current_datetime = timezone.now()
|
||||||
films_sessions = super().get_queryset().filter(
|
films_sessions = super().get_queryset().select_related(
|
||||||
|
'film',
|
||||||
|
).prefetch_related(
|
||||||
|
'film__genres',
|
||||||
|
'film__countries',
|
||||||
|
).filter(
|
||||||
start_datetime__gte=current_datetime,
|
start_datetime__gte=current_datetime,
|
||||||
).prefetch_related(
|
).prefetch_related(
|
||||||
FilmSession.film.field.name,
|
FilmSession.film.field.name,
|
||||||
|
|||||||
@ -260,42 +260,28 @@ FROM
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Определим временной промежуток в рамках рабочего времени кинотеатра (8:00 - 22:00)
|
-- Определим временной промежуток в рамках рабочего дня кинотеатра (10:00 - 22:00)
|
||||||
WITH RECURSIVE session_times AS (
|
WITH RECURSIVE session_times AS (
|
||||||
SELECT strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+8 hours') AS start_time
|
SELECT strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+10 hours') AS start_datetime
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT strftime('%Y-%m-%d %H:%M', start_time, '+2 hours') FROM session_times
|
SELECT strftime('%Y-%m-%d %H:%M', start_datetime, '+2 hours') FROM session_times
|
||||||
WHERE start_time < strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+22 hours')
|
WHERE start_datetime < strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+22 hours')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
-- Вставим сеансы для каждого фильма в каждый зал
|
||||||
--INSERT INTO timetable_film_sessions (start_datetime, price, auditorium_id, film_id)
|
INSERT INTO timetable_film_sessions (start_datetime, price, auditorium_id, film_id)
|
||||||
SELECT
|
SELECT
|
||||||
CASE
|
start_datetime,
|
||||||
WHEN MAX(end_datetime) IS NULL THEN start_datetime
|
10.00 AS price, -- Укажите цену билета здесь
|
||||||
ELSE MAX(end_datetime)
|
|
||||||
END AS start_time,
|
|
||||||
500.00 AS price,
|
|
||||||
auditoriums.id AS auditorium_id,
|
auditoriums.id AS auditorium_id,
|
||||||
films.id AS film_id
|
films.id AS film_id
|
||||||
FROM
|
FROM
|
||||||
session_times
|
session_times,
|
||||||
CROSS JOIN
|
films_films AS films,
|
||||||
films_films AS films
|
|
||||||
CROSS JOIN
|
|
||||||
timetable_auditoriums AS auditoriums
|
timetable_auditoriums AS auditoriums
|
||||||
LEFT JOIN
|
|
||||||
timetable_film_sessions AS prev_sessions
|
|
||||||
ON
|
|
||||||
auditoriums.id = prev_sessions.auditorium_id
|
|
||||||
AND
|
|
||||||
prev_sessions.start_datetime <= start_datetime
|
|
||||||
AND
|
|
||||||
prev_sessions.start_datetime + (films.duration || ' MINUTES') >= start_datetime
|
|
||||||
GROUP BY
|
|
||||||
start_time, auditoriums.id, films.id
|
|
||||||
ORDER BY
|
ORDER BY
|
||||||
start_time, film_id;
|
start_datetime, film_id;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -345,4 +331,25 @@ INSERT INTO films_countries (name) VALUES
|
|||||||
('Испания');
|
('Испания');
|
||||||
|
|
||||||
|
|
||||||
|
-- Добавление режиссеров к фильмам
|
||||||
|
INSERT INTO films_films_directors (film_id, director_id)
|
||||||
|
SELECT f.id AS film_id, d.id AS director_id
|
||||||
|
FROM films_films AS f
|
||||||
|
JOIN films_directors AS d ON d.id <= f.id
|
||||||
|
WHERE f.id BETWEEN 1 AND 40;
|
||||||
|
|
||||||
|
-- Добавление актеров к фильмам
|
||||||
|
INSERT INTO films_films_actors (film_id, actor_id)
|
||||||
|
SELECT f.id AS film_id, a.id AS actor_id
|
||||||
|
FROM films_films AS f
|
||||||
|
JOIN films_actors AS a ON a.id <= f.id
|
||||||
|
WHERE f.id BETWEEN 1 AND 40;
|
||||||
|
|
||||||
|
-- Добавление стран к фильмам
|
||||||
|
INSERT INTO films_films_countries (film_id, country_id)
|
||||||
|
SELECT f.id AS film_id, c.id AS country_id
|
||||||
|
FROM films_films AS f
|
||||||
|
JOIN films_countries AS c ON c.id <= f.id
|
||||||
|
WHERE f.id BETWEEN 1 AND 40;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user