diff --git a/CineSync/films/migrations/0002_alter_film_genres.py b/CineSync/films/migrations/0002_alter_film_genres.py new file mode 100644 index 0000000..37eb582 --- /dev/null +++ b/CineSync/films/migrations/0002_alter_film_genres.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2 on 2024-04-09 16:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("films", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="film", + name="genres", + field=models.ManyToManyField( + help_text="Жанры фильма", + related_name="films", + related_query_name="films", + to="films.genre", + verbose_name="Жанры", + ), + ), + ] diff --git a/CineSync/films/models.py b/CineSync/films/models.py index 4ea0108..ffbe682 100644 --- a/CineSync/films/models.py +++ b/CineSync/films/models.py @@ -1,9 +1,9 @@ -from django.db import models +from django.db.models import Model, CharField, IntegerField, DateField, ManyToManyField from django.core.validators import MinValueValidator -class Genre(models.Model): - name = models.CharField( +class Genre(Model): + name = CharField( 'Название', help_text='Название жанра', max_length=100, @@ -16,30 +16,31 @@ class Genre(models.Model): verbose_name_plural = 'Жанры' -class Film(models.Model): - name = models.CharField( +class Film(Model): + name = CharField( 'Название', help_text='Название фильма', max_length=100, null=False, ) - duration = models.IntegerField( + duration = IntegerField( 'Продолжительность', help_text='Продолжительность фильма (в минутах)', validators=[MinValueValidator(0)], null=False, ) - release_date = models.DateField( + release_date = DateField( 'Дата релиза', help_text='Дата выхода фильма', ) - genres = models.ManyToManyField( + genres = ManyToManyField( Genre, verbose_name='Жанры', related_name='films', + related_query_name='films', help_text='Жанры фильма', ) diff --git a/CineSync/tickets/migrations/0001_initial.py b/CineSync/tickets/migrations/0001_initial.py new file mode 100644 index 0000000..4d89096 --- /dev/null +++ b/CineSync/tickets/migrations/0001_initial.py @@ -0,0 +1,44 @@ +# Generated by Django 4.2 on 2024-04-09 16:27 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Ticket", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "row_number", + models.IntegerField( + help_text="Номер ряда", + validators=[django.core.validators.MinValueValidator(1)], + verbose_name="Номер ряда", + ), + ), + ( + "column_number", + models.IntegerField( + help_text="Номер кресла в ряду", + validators=[django.core.validators.MinValueValidator(1)], + verbose_name="Номер кресла", + ), + ), + ], + ), + ] diff --git a/CineSync/tickets/migrations/0002_initial.py b/CineSync/tickets/migrations/0002_initial.py new file mode 100644 index 0000000..302ed80 --- /dev/null +++ b/CineSync/tickets/migrations/0002_initial.py @@ -0,0 +1,38 @@ +# Generated by Django 4.2 on 2024-04-09 16:27 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("tickets", "0001_initial"), + ("timetable", "0002_rename_rows_row_filmsession"), + ("users", "0001_initial"), + ] + + operations = [ + migrations.AddField( + model_name="ticket", + name="session_id", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="tickets", + related_query_name="tickets", + to="timetable.filmsession", + ), + ), + migrations.AddField( + model_name="ticket", + name="user_id", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="tickets", + related_query_name="tickets", + to="users.profile", + ), + ), + ] diff --git a/CineSync/tickets/migrations/0003_rename_session_id_ticket_session_and_more.py b/CineSync/tickets/migrations/0003_rename_session_id_ticket_session_and_more.py new file mode 100644 index 0000000..85148ea --- /dev/null +++ b/CineSync/tickets/migrations/0003_rename_session_id_ticket_session_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2 on 2024-04-09 16:39 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("tickets", "0002_initial"), + ] + + operations = [ + migrations.RenameField( + model_name="ticket", + old_name="session_id", + new_name="session", + ), + migrations.RenameField( + model_name="ticket", + old_name="user_id", + new_name="user", + ), + ] diff --git a/CineSync/tickets/migrations/0004_rename_user_ticket_profile.py b/CineSync/tickets/migrations/0004_rename_user_ticket_profile.py new file mode 100644 index 0000000..03f9f34 --- /dev/null +++ b/CineSync/tickets/migrations/0004_rename_user_ticket_profile.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2 on 2024-04-09 16:40 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("tickets", "0003_rename_session_id_ticket_session_and_more"), + ] + + operations = [ + migrations.RenameField( + model_name="ticket", + old_name="user", + new_name="profile", + ), + ] diff --git a/CineSync/tickets/models.py b/CineSync/tickets/models.py index 991fde8..07e7ad7 100644 --- a/CineSync/tickets/models.py +++ b/CineSync/tickets/models.py @@ -1,33 +1,33 @@ -from django.db import models +from django.db.models import ForeignKey, CASCADE, Model, IntegerField from django.core.validators import MinValueValidator -from timetable.models import FilmSessions +from timetable.models import FilmSession from users.models import Profile -class Ticket(models.Model): - session_id = models.ForeignKey( - FilmSessions, - on_delete=models.CASCADE, +class Ticket(Model): + session = ForeignKey( + FilmSession, + on_delete=CASCADE, related_name='tickets', related_query_name='tickets', ) - user_id = models.ForeignKey( + profile = ForeignKey( Profile, - on_delete=models.CASCADE, + on_delete=CASCADE, related_name='tickets', related_query_name='tickets', ) - row_number = models.IntegerField( + row_number = IntegerField( 'Номер ряда', null=False, validators=[MinValueValidator(1)], help_text='Номер ряда', ) - column_number = models.IntegerField( + column_number = IntegerField( 'Номер кресла', null=False, validators=[MinValueValidator(1)], diff --git a/CineSync/timetable/migrations/0002_rename_rows_row_filmsession.py b/CineSync/timetable/migrations/0002_rename_rows_row_filmsession.py new file mode 100644 index 0000000..29d2dab --- /dev/null +++ b/CineSync/timetable/migrations/0002_rename_rows_row_filmsession.py @@ -0,0 +1,68 @@ +# Generated by Django 4.2 on 2024-04-09 16:27 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("films", "0001_initial"), + ("timetable", "0001_initial"), + ] + + operations = [ + migrations.RenameModel( + old_name="Rows", + new_name="Row", + ), + migrations.CreateModel( + name="FilmSession", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "start_datetime", + models.DateTimeField(verbose_name="Дата и время начала сеанса"), + ), + ( + "price", + models.FloatField( + validators=[django.core.validators.MinValueValidator(1)], + verbose_name="Цена билета", + ), + ), + ( + "auditorium", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name="sessions", + to="timetable.auditorium", + verbose_name="зал", + ), + ), + ( + "film", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name="sessions", + to="films.film", + verbose_name="фильм", + ), + ), + ], + options={ + "verbose_name": "Сеанс", + "verbose_name_plural": "Сеансы", + "db_table": "timetable_film_sessions", + }, + ), + ] diff --git a/CineSync/timetable/migrations/0003_alter_filmsession_auditorium_alter_filmsession_film_and_more.py b/CineSync/timetable/migrations/0003_alter_filmsession_auditorium_alter_filmsession_film_and_more.py new file mode 100644 index 0000000..b356248 --- /dev/null +++ b/CineSync/timetable/migrations/0003_alter_filmsession_auditorium_alter_filmsession_film_and_more.py @@ -0,0 +1,48 @@ +# Generated by Django 4.2 on 2024-04-09 16:39 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("films", "0002_alter_film_genres"), + ("timetable", "0002_rename_rows_row_filmsession"), + ] + + operations = [ + migrations.AlterField( + model_name="filmsession", + name="auditorium", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="sessions", + related_query_name="sessions", + to="timetable.auditorium", + verbose_name="Зал", + ), + ), + migrations.AlterField( + model_name="filmsession", + name="film", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="sessions", + related_query_name="sessions", + to="films.film", + verbose_name="Фильм", + ), + ), + migrations.AlterField( + model_name="row", + name="auditorium", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name="rows", + related_query_name="rows", + to="timetable.auditorium", + verbose_name="Зал", + ), + ), + ] diff --git a/CineSync/timetable/models.py b/CineSync/timetable/models.py index 738f0a9..db83526 100644 --- a/CineSync/timetable/models.py +++ b/CineSync/timetable/models.py @@ -1,7 +1,8 @@ -from django.db.models import Model, CharField, IntegerField, OneToOneField, CASCADE, DateTimeField, FloatField +from django.db.models import Model, CharField, IntegerField, OneToOneField, CASCADE, DateTimeField, FloatField, \ + ForeignKey from django.core.validators import MinValueValidator -from films.models import Films +from films.models import Film class Auditorium(Model): @@ -41,8 +42,9 @@ class Row(Model): auditorium = OneToOneField( Auditorium, on_delete=CASCADE, - verbose_name='зал', + verbose_name='Зал', related_name='rows', + related_query_name='rows', ) class Meta: @@ -63,22 +65,23 @@ class FilmSession(Model): ], ) - film = OneToOneField( - Films, + film = ForeignKey( + Film, on_delete=CASCADE, - verbose_name='фильм', + verbose_name='Фильм', related_name='sessions', + related_query_name='sessions', ) - auditorium = OneToOneField( + auditorium = ForeignKey( Auditorium, on_delete=CASCADE, - verbose_name='зал', + verbose_name='Зал', related_name='sessions', + related_query_name='sessions', ) class Meta: db_table = 'timetable_film_sessions' verbose_name = 'Сеанс' verbose_name_plural = 'Сеансы' - diff --git a/CineSync/users/migrations/0002_profile_genres.py b/CineSync/users/migrations/0002_profile_genres.py new file mode 100644 index 0000000..8415d6b --- /dev/null +++ b/CineSync/users/migrations/0002_profile_genres.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2 on 2024-04-09 16:39 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("films", "0002_alter_film_genres"), + ("users", "0001_initial"), + ] + + operations = [ + migrations.AddField( + model_name="profile", + name="genres", + field=models.ForeignKey( + default="", + on_delete=django.db.models.deletion.CASCADE, + related_name="profiles", + related_query_name="profiles", + to="films.genre", + ), + preserve_default=False, + ), + ] diff --git a/CineSync/users/migrations/0003_remove_profile_genres_profile_genres.py b/CineSync/users/migrations/0003_remove_profile_genres_profile_genres.py new file mode 100644 index 0000000..4e85427 --- /dev/null +++ b/CineSync/users/migrations/0003_remove_profile_genres_profile_genres.py @@ -0,0 +1,25 @@ +# Generated by Django 4.2 on 2024-04-09 16:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("films", "0002_alter_film_genres"), + ("users", "0002_profile_genres"), + ] + + operations = [ + migrations.RemoveField( + model_name="profile", + name="genres", + ), + migrations.AddField( + model_name="profile", + name="genres", + field=models.ManyToManyField( + related_name="profiles", related_query_name="profiles", to="films.genre" + ), + ), + ] diff --git a/CineSync/users/models.py b/CineSync/users/models.py index faa9fb3..35de351 100644 --- a/CineSync/users/models.py +++ b/CineSync/users/models.py @@ -1,10 +1,12 @@ import time from django.conf import settings -from django.db.models import Model, OneToOneField, CASCADE, DateField, CharField, ImageField +from django.db.models import Model, OneToOneField, CASCADE, DateField, CharField, ImageField, ManyToManyField from django.utils.safestring import mark_safe from sorl.thumbnail import get_thumbnail +from films.models import Genre + class Profile(Model): @@ -33,6 +35,11 @@ class Profile(Model): verbose_name='Аватар пользователя', upload_to=get_upload_path, ) + genres = ManyToManyField( + Genre, + related_name='profiles', + related_query_name='profiles', + ) def get_image_x300(self): return get_thumbnail(