оптимизировал запросы
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 %}"
|
||||
href="{% url 'time_table:main' %}">Расписание</a>
|
||||
</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 %}
|
||||
</ul>
|
||||
</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 tickets.views import ticket_view, order_success
|
||||
from tickets.views import ticket_view, order_success, my_orders
|
||||
|
||||
app_name = 'tickets'
|
||||
|
||||
urlpatterns = [
|
||||
path('', ticket_view, name='tickets'),
|
||||
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 tickets.models import Order, Ticket
|
||||
|
||||
|
||||
def ticket_view(request):
|
||||
return render(request, 'tickets/ticket_buy.html')
|
||||
@ -7,3 +10,16 @@ def ticket_view(request):
|
||||
|
||||
def order_success(request):
|
||||
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):
|
||||
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,
|
||||
).prefetch_related(
|
||||
FilmSession.film.field.name,
|
||||
|
||||
@ -260,42 +260,28 @@ FROM
|
||||
|
||||
|
||||
|
||||
-- Определим временной промежуток в рамках рабочего времени кинотеатра (8:00 - 22:00)
|
||||
-- Определим временной промежуток в рамках рабочего дня кинотеатра (10:00 - 22:00)
|
||||
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
|
||||
SELECT strftime('%Y-%m-%d %H:%M', start_time, '+2 hours') FROM session_times
|
||||
WHERE start_time < strftime('%Y-%m-%d %H:%M', 'now', 'start of day', '+22 hours')
|
||||
SELECT strftime('%Y-%m-%d %H:%M', start_datetime, '+2 hours') FROM session_times
|
||||
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
|
||||
CASE
|
||||
WHEN MAX(end_datetime) IS NULL THEN start_datetime
|
||||
ELSE MAX(end_datetime)
|
||||
END AS start_time,
|
||||
500.00 AS price,
|
||||
start_datetime,
|
||||
10.00 AS price, -- Укажите цену билета здесь
|
||||
auditoriums.id AS auditorium_id,
|
||||
films.id AS film_id
|
||||
FROM
|
||||
session_times
|
||||
CROSS JOIN
|
||||
films_films AS films
|
||||
CROSS JOIN
|
||||
session_times,
|
||||
films_films AS films,
|
||||
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
|
||||
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