From 409d81b82f42dd1568d6c8a7cf777bc596acdc7f Mon Sep 17 00:00:00 2001 From: andrei Date: Wed, 17 Apr 2024 20:39:10 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=20=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=8C=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D1=83?= =?UTF-8?q?=D1=8E=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=83,=20?= =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=B0=D0=B4=D0=BC=D0=B8?= =?UTF-8?q?=D0=BD=D0=BA=D1=83=20=D0=B4=D0=BB=D1=8F=20=D1=84=D0=B8=D0=BB?= =?UTF-8?q?=D1=8C=D0=BC=D0=BE=D0=B2=20=D0=B8=20=D0=B6=D0=B0=D0=BD=D1=80?= =?UTF-8?q?=D0=BE=D0=B2,=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=85=D0=B5=D0=B0=D0=B4=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CineSync/films/admin.py | 30 ++++++++--------- CineSync/films/migrations/0004_film_image.py | 24 ++++++++++++++ CineSync/films/models.py | 16 +++++++-- CineSync/home/views.py | 8 ++++- CineSync/static/css/home/homepage.css | 24 ++++++++++++++ CineSync/templates/home/homepage.html | 33 ++++++++++++++++++- CineSync/templates/includes/header.html | 3 ++ .../0005_filmsession_end_datetime.py | 20 +++++++++++ CineSync/timetable/models.py | 18 ++++++++-- CineSync/users/admin.py | 23 ++++++++++++- 10 files changed, 175 insertions(+), 24 deletions(-) create mode 100644 CineSync/films/migrations/0004_film_image.py create mode 100644 CineSync/static/css/home/homepage.css create mode 100644 CineSync/timetable/migrations/0005_filmsession_end_datetime.py diff --git a/CineSync/films/admin.py b/CineSync/films/admin.py index ad78704..15686eb 100644 --- a/CineSync/films/admin.py +++ b/CineSync/films/admin.py @@ -1,24 +1,22 @@ from django.contrib import admin -from django.contrib.auth import get_user_model -from django.contrib.auth.admin import UserAdmin -from users.models import Profile - -user = get_user_model() -admin.site.unregister(user) +from films.models import Film, Genre -class ProfileInline(admin.TabularInline): - can_delete = False - model = Profile - fields = [ - Profile.birthday.field.name, - Profile.image.field.name, +@admin.register(Film) +class ItemAdmin(admin.ModelAdmin): + list_display = [ + Film.name.field.name, + Film.duration.field.name, + ] + + filter_horizontal = [ + Film.genres.field.name, ] -@admin.register(user) -class UserAdmin(UserAdmin): - inlines = [ - ProfileInline, +@admin.register(Genre) +class GenreAdmin(admin.ModelAdmin): + list_display = [ + Genre.name.field.name, ] diff --git a/CineSync/films/migrations/0004_film_image.py b/CineSync/films/migrations/0004_film_image.py new file mode 100644 index 0000000..1df2664 --- /dev/null +++ b/CineSync/films/migrations/0004_film_image.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2 on 2024-04-17 13:08 + +from django.db import migrations, models +import films.models + + +class Migration(migrations.Migration): + + dependencies = [ + ("films", "0003_film_description"), + ] + + operations = [ + migrations.AddField( + model_name="film", + name="image", + field=models.ImageField( + blank=True, + null=True, + upload_to=films.models.Film.get_upload_path, + verbose_name="Изображение фильма", + ), + ), + ] diff --git a/CineSync/films/models.py b/CineSync/films/models.py index 86afd62..a8f719d 100644 --- a/CineSync/films/models.py +++ b/CineSync/films/models.py @@ -1,4 +1,6 @@ import time +from datetime import timedelta +from random import shuffle from django.db.models import ( Model, @@ -18,6 +20,16 @@ class FilmManager(Manager): release_date__lt=timezone.now(), ) + def on_main(self): + current_datetime = timezone.now() + end_datetime = current_datetime + timedelta(days=5) + films_with_sessions = Film.objects.filter( + sessions__start_datetime__gte=current_datetime, + sessions__start_datetime__lte=end_datetime, + ).exclude(image=None).distinct() + shuffle(list(films_with_sessions)) + return films_with_sessions + class Genre(Model): name = CharField( @@ -35,7 +47,7 @@ class Genre(Model): class Film(Model): def get_upload_path(self, filename): - return f'users/avatars/{self.pk}/{time.time()}_{filename}' + return f'users/films/{self.pk}/{time.time()}_{filename}' objects = FilmManager() @@ -67,7 +79,7 @@ class Film(Model): image = ImageField( null=True, blank=True, - verbose_name='Аватар пользователя', + verbose_name='Изображение фильма', upload_to=get_upload_path, ) diff --git a/CineSync/home/views.py b/CineSync/home/views.py index defa00e..4e83e8f 100644 --- a/CineSync/home/views.py +++ b/CineSync/home/views.py @@ -1,11 +1,17 @@ from django.http import HttpResponse from django.shortcuts import render +from films.models import Film + def homepage(request): + films = Film.objects.on_main() template = render( request, - 'home/homepage.html' + 'home/homepage.html', + context={ + 'films_preview': films + } ) return HttpResponse( template, diff --git a/CineSync/static/css/home/homepage.css b/CineSync/static/css/home/homepage.css new file mode 100644 index 0000000..4f7eade --- /dev/null +++ b/CineSync/static/css/home/homepage.css @@ -0,0 +1,24 @@ +.carousel_films { + margin-top: 5vw; + height: 30vw; + width: 100%; +} +.film_card_image { + object-fit: cover; + height: 30vw !important; + width: 70% !important; + border-radius: 3vw; +} +.carousel-item-next, .carousel-item-prev, .carousel-item.active { + display: flex; + justify-content: center; +} +.caption_block { + background-color: rgba(13, 39, 58, 0.8); + border-radius: 2vw; + width: 40%; + display: flex !important; + flex-direction: column; + align-items: center; + margin-left: 15%; +} \ No newline at end of file diff --git a/CineSync/templates/home/homepage.html b/CineSync/templates/home/homepage.html index 32d72c8..4c63f23 100644 --- a/CineSync/templates/home/homepage.html +++ b/CineSync/templates/home/homepage.html @@ -4,5 +4,36 @@ Главная {% endblock title %} {% block content %} - + + {% endblock %} \ No newline at end of file diff --git a/CineSync/templates/includes/header.html b/CineSync/templates/includes/header.html index e39724a..bead911 100644 --- a/CineSync/templates/includes/header.html +++ b/CineSync/templates/includes/header.html @@ -30,6 +30,9 @@ {% endif %} + {% if user.is_staff %} + Админка + {% endif %} {% else %}