Физическая модель базы данных 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Физическая модель базы данных



База данных разработана на SQLite 3

 

class Category(models.Model):

"""Категории"""

name = models.CharField("Категория", max_length=150)

description = models.TextField("Описание")

url = models.SlugField(max_length=160, unique=True)

def __str__(self):

   return self.name

class Meta:

   verbose_name = "Категория"

   verbose_name_plural = "Категории"

 

class Actor(models.Model):

"""Актеры"""

name = models.CharField("Имя", max_length=100)

age = models.PositiveSmallIntegerField("Возраст", default=0)

description = models.TextField("Описание")

image = models.ImageField("Изображение", upload_to="actors/")

def __str__(self):

   return self.name

def get_absolute_url(self):

   return reverse('actor_detail', kwargs={"slug": self.name})

class Meta:

   verbose_name = "Актер"

   verbose_name_plural = "Актеры"

 

class Director(models.Model):

"""Режиссеры"""

name = models.CharField("Имя", max_length=100)

age = models.PositiveSmallIntegerField("Возраст", default=0)

description = models.TextField("Описание")

image = models.ImageField("Изображение", upload_to="directors/")

def __str__(self):

   return self.name

def get_absolute_url(self):

   return reverse('director_detail', kwargs={"slug": self.name})

class Meta:

   verbose_name = "Режиссер"

   verbose_name_plural = "Режиссеры"

 

class Genre(models.Model):

"""Жанры"""

name = models.CharField("Имя", max_length=100)

description = models.TextField("Описание")

url = models.SlugField(max_length=160, unique=True)

def __str__(self):

   return self.name

class Meta:

   verbose_name = "Жанр"

   verbose_name_plural = "Жанры"

 

class Movie(models.Model):

"""Фильм"""

title = models.CharField("Название", max_length=100)

tagline = models.CharField("Слоган", max_length=100, default='')

description = models.TextField("Описание")

poster = models.ImageField("Постер", upload_to="movies/")

year = models.PositiveSmallIntegerField("Дата выхода", default=2021)

country = models.CharField("Страна", max_length=30)

directors = models.ManyToManyField(Director, verbose_name="режиссер", related_name="film_director")

actors = models.ManyToManyField(Actor, verbose_name="актеры", related_name="film_actor")

genres = models.ManyToManyField(Genre, verbose_name="жанры")

world_premiere = models.DateField("Примьера в мире", default=date.today)

budget = models.PositiveIntegerField("Бюджет", default=0, help_text="указывать сумму в долларах")

fees_in_usa = models.PositiveIntegerField("Сборы в США", default=0, help_text="указывать сумму в долларах")

fess_in_world = models.PositiveIntegerField("Сборы в мире", default=0, help_text="указывать сумму в долларах")

category = models.ForeignKey(Category, verbose_name="Категория", on_delete=models.SET_NULL, null=True)

url = models.SlugField(max_length=130, unique=True)

draft = models.BooleanField("Черновик", default=False)

def __str__(self):

   return self.title

def get_absolute_url(self):

   return reverse("movie_detail", kwargs={"slug": self.url})

def get_review(self):

   return self.reviews_set.filter(parent__isnull=True)

class Meta:

   verbose_name = "Фильм"

   verbose_name_plural = "Фильмы"

 

class MovieShots(models.Model):

"""Кадры из фильма"""

title = models.CharField("Заголовок", max_length=100)

description = models.TextField("Описание")

image = models.ImageField("Изображение", upload_to="movie_shots/")

movie = models.ForeignKey(Movie, verbose_name="Фильм", on_delete=models.CASCADE)

def __str__(self):

   return self.title

class Meta:

   verbose_name = "Кадр из фильма"

   verbose_name_plural = "Кадры из фильма"

 

class RatingStar(models.Model):

"""Звезда рейтинга"""

value = models.SmallIntegerField("Значение", default=1)

def __str__(self):

   return f'{self.value}'

class Meta:

   verbose_name = "Звезда рейтинга"

   verbose_name_plural = "Звезды рейтинга"

   ordering = ["-value"]

 

class Rating(models.Model):

"""Рейтинг"""

ip = models.CharField("IP адрес", max_length=15)

star = models.ForeignKey(RatingStar, on_delete=models.CASCADE, verbose_name="звезда")

movie = models.ForeignKey(Movie, on_delete=models.CASCADE, verbose_name="фильм")

def __str__(self):

   return f"{self.star} - {self.movie}"

class Meta:

   verbose_name = "Рейтинг"

   verbose_name_plural = "Рейтинги"

 

class Reviews(models.Model):

"""Отзывы"""

email = models.EmailField()

name = models.CharField("Имя", max_length=100)

text = models.TextField("Сообщение", max_length=5000)

parent = models.ForeignKey('self', verbose_name="Родитель", on_delete=models.SET_NULL, blank=True, null=True)

movie = models.ForeignKey(Movie, verbose_name="фильм", on_delete=models.CASCADE)

def __str__(self):

   return f"{self.name} - {self.movie}"

class Meta:

   verbose_name = "Отзыв"

   verbose_name_plural = "Отзывы"

Описание программы

 

Физическая структура

 

Данный курсовой проект имеет следующую физическую структуру, что изображено на рисунке 4.1.

 

Рисунок 4.1 – Физическая структура проекта

 

Папка movies включает в себя следующие формы:

1) admin – отвечает за панель администратора.

2) apps – отвечает за основные настройки.

3) forms – отображение и добавление рейтинга и отзыва к фильму

4) models – создание базы данных

5) urls – создание url путей

6) views – содержит представление жанров, вывод полного описания фильма, вывод всех фильмов, вывод отзыва и рейтинга, вывод актеров и режиссеров, фильтрацию фильмов, поиск.

 

Логическая структура

 

Классы Category, Actor, Director, Genre, Movie, MovieShots, RatingStar, Rating, Reviews содержат метод __str__(self), для вывода данных.

Класс Actor, Director, Movie содержат метод get_absolut_url(), для корректного отображения ссылки.

Класс Movie содержит метод get_review(), для добавления и вывода отзывов

Особенности интерфейса

При открытии приложения пользователю отображается главная форма. На данной форме расположены последние добавленные фильмы, фильтрация, поиск, изображённые на рисунке 4.2.

 

Рисунок 4.2 – Главная форма

При выборе фильтров, пользователю выводится результат фильтрации, изображено на рисунке 4.3.

 

Рисунок 4.3 – Результат фильтрации

 

При нажатии на кнопку «Поиск», если поле поиска заполнено – пользователю выводятся фильмы с похожим названием, изображено на рисунке 4.4.

Рисунок 4.4 – Фильмы с похожим названием

 

При нажатии на пункт «Отправить», пользователь отправляет свой отзыв к фильму, изображено на рисунке 4.5.

 

Рисунок 4.5 – Отправка отзыва



Поделиться:


Последнее изменение этой страницы: 2021-05-12; просмотров: 69; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.174.174 (0.011 с.)