diff --git a/CineSync/films/admin.py b/CineSync/films/admin.py index 4ffb67d..4ab5481 100644 --- a/CineSync/films/admin.py +++ b/CineSync/films/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin from django.utils.safestring import mark_safe -from films.models import Film, Genre +from films.models import Film, Genre, Actor, Director, Country @admin.register(Film) @@ -16,6 +16,9 @@ class FilmAdmin(admin.ModelAdmin): filter_horizontal = [ Film.genres.field.name, + Film.directors.field.name, + Film.countries.field.name, + Film.actors.field.name, ] def get_image(self, obj): @@ -29,3 +32,26 @@ class GenreAdmin(admin.ModelAdmin): list_display = [ Genre.name.field.name, ] + + +@admin.register(Actor) +class ActorAdmin(admin.ModelAdmin): + list_display = [ + Actor.first_name.field.name, + Actor.last_name.field.name, + ] + + +@admin.register(Director) +class DirectorAdmin(admin.ModelAdmin): + list_display = [ + Director.first_name.field.name, + Director.last_name.field.name, + ] + + +@admin.register(Country) +class CountryAdmin(admin.ModelAdmin): + list_display = [ + Country.name.field.name, + ] diff --git a/CineSync/films/migrations/0006_actor_country_director_film_actors_film_countries_and_more.py b/CineSync/films/migrations/0006_actor_country_director_film_actors_film_countries_and_more.py new file mode 100644 index 0000000..fd0db36 --- /dev/null +++ b/CineSync/films/migrations/0006_actor_country_director_film_actors_film_countries_and_more.py @@ -0,0 +1,133 @@ +# Generated by Django 4.2 on 2024-04-21 12:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("films", "0005_film_age_limit"), + ] + + operations = [ + migrations.CreateModel( + name="Actor", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "first_name", + models.CharField( + help_text="Имя актера", max_length=100, verbose_name="Имя" + ), + ), + ( + "last_name", + models.CharField( + help_text="Фамилия актера", + max_length=100, + verbose_name="Фамилия", + ), + ), + ], + options={ + "verbose_name": "Актер", + "verbose_name_plural": "Актеры", + "db_table": "films_actors", + }, + ), + migrations.CreateModel( + name="Country", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "name", + models.CharField( + help_text="Название страны", + max_length=500, + verbose_name="Название", + ), + ), + ], + options={ + "verbose_name": "Страна", + "verbose_name_plural": "Страны", + "db_table": "films_countries", + }, + ), + migrations.CreateModel( + name="Director", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "first_name", + models.CharField( + help_text="Имя режиссера", max_length=100, verbose_name="Имя" + ), + ), + ( + "last_name", + models.CharField( + help_text="Фамилия режиссера", + max_length=100, + verbose_name="Фамилия", + ), + ), + ], + options={ + "verbose_name": "Режиссер", + "verbose_name_plural": "Режиссеры", + "db_table": "films_directors", + }, + ), + migrations.AddField( + model_name="film", + name="actors", + field=models.ManyToManyField( + related_name="actor_films", + related_query_name="actor_films", + to="films.actor", + ), + ), + migrations.AddField( + model_name="film", + name="countries", + field=models.ManyToManyField( + related_name="country_films", + related_query_name="country_films", + to="films.director", + ), + ), + migrations.AddField( + model_name="film", + name="directors", + field=models.ManyToManyField( + related_name="director_films", + related_query_name="director_films", + to="films.director", + ), + ), + ] diff --git a/CineSync/films/models.py b/CineSync/films/models.py index 437beba..e470b32 100644 --- a/CineSync/films/models.py +++ b/CineSync/films/models.py @@ -9,6 +9,7 @@ from django.db.models import ( DateField, ManyToManyField, Manager, ImageField, Min, + ForeignKey, CASCADE, ) from django.utils import timezone from django.core.validators import MinValueValidator @@ -68,6 +69,57 @@ class Genre(Model): verbose_name_plural = 'Жанры' +class Director(Model): + first_name = CharField( + 'Имя', + help_text='Имя режиссера', + max_length=100, + ) + + last_name = CharField( + 'Фамилия', + help_text='Фамилия режиссера', + max_length=100, + ) + + class Meta: + db_table = 'films_directors' + verbose_name = 'Режиссер' + verbose_name_plural = 'Режиссеры' + + +class Actor(Model): + first_name = CharField( + 'Имя', + help_text='Имя актера', + max_length=100, + ) + + last_name = CharField( + 'Фамилия', + help_text='Фамилия актера', + max_length=100, + ) + + class Meta: + db_table = 'films_actors' + verbose_name = 'Актер' + verbose_name_plural = 'Актеры' + + +class Country(Model): + name = CharField( + 'Название', + help_text='Название страны', + max_length=500, + ) + + class Meta: + db_table = 'films_countries' + verbose_name = 'Страна' + verbose_name_plural = 'Страны' + + class Film(Model): def __str__(self): return self.name @@ -130,6 +182,24 @@ class Film(Model): ), ) + directors = ManyToManyField( + Director, + related_name='director_films', + related_query_name='director_films', + ) + + countries = ManyToManyField( + Director, + related_name='country_films', + related_query_name='country_films', + ) + + actors = ManyToManyField( + Actor, + related_name='actor_films', + related_query_name='actor_films', + ) + def get_image_300x300(self): return sorl.thumbnail.get_thumbnail( self.image, diff --git a/Документы/База.drawio.png b/Документы/База.drawio.png index 0a2b3dd..ad32b75 100644 Binary files a/Документы/База.drawio.png and b/Документы/База.drawio.png differ