добавил новые таблицы в базу, расширил информацию о фильме

This commit is contained in:
Андрей Дувакин 2024-04-21 17:41:38 +05:00
parent e52e0a5374
commit b4a98e1bb6
4 changed files with 230 additions and 1 deletions

View File

@ -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,
]

View File

@ -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",
),
),
]

View File

@ -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,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 195 KiB