class Request(models.Model): """Заявка на участие""" user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name='Пользователь на сайте', blank=True, null=True) name = models.CharField('ФИО', max_length=200) avatar = models.ImageField('Ваша фотография', blank=True, null=True, upload_to=path_and_rename( "award_files/avatars/", 'avatar')) company = models.CharField('Компания', max_length=200) professional = models.CharField('Должность', max_length=100) email = models.EmailField('Email') phone = models.CharField('Телефон', max_length=30) nomination = models.ForeignKey(Nomination, on_delete=models.PROTECT, verbose_name='Номинация') project_name = models.CharField('Название проекта', max_length=300) project_start_date = models.DateField('Дата внедрения проекта', default=timezone.now) project_appoints = RichTextUploadingField('Преимущества проекта', null=True) description = RichTextUploadingField('Описание проекта', null=True) results = RichTextUploadingField( 'Результаты, полученные после внедрения проекта', null=True) resume = models.FileField('Резюме заявителя', upload_to=path_and_rename( "award_files/resume/", 'resume')) video = models.TextField('Youtube ролик с видеопрезентацией проекта') presentation = models.FileField('Презентация проекта (форматы pptx/pdf)', upload_to=path_and_rename( "award_files/presentations/", 'presentation')) jurys_nomination = models.ManyToManyField( NominationJury, verbose_name='Рекомендовать к номинации', blank=True) vote = models.ManyToManyField(Vote, verbose_name='Голос', blank=True) jury_approved = models.ManyToManyField(JuryApproved, verbose_name='Мнения жюри', blank=True) pub_date = models.DateTimeField('Дата подачи заявки', auto_now_add=True) to_edit_notification = models.TextField('Уведомление для участника', blank=True) for_jury_notification = models.TextField('Уведомление для жюри', blank=True) public_for_jury = models.BooleanField('На рассмотрение жюри', default=False) public = models.BooleanField('Опубликовать', default=False) def get_absolute_url(self): return reverse('request_detail', kwargs={'pk': self.id}) def __str__(self): return self.project_name class Meta: verbose_name = 'Заявка на премию' verbose_name_plural = 'Заявки на премию'
class ForumParticipant(models.Model): """Участник форума""" table = models.PositiveSmallIntegerField('Номер стола') speaking_time = models.CharField('Время выступления', max_length=255) name = models.CharField('Имя участника', max_length=255) bio = RichTextUploadingField('Био', blank=True) company_logo = models.ImageField('Логотип компании', upload_to=path_and_rename("forum/", 'image'), null=True) avatar = models.ImageField('Фотография', upload_to=path_and_rename("forum/", 'image')) presentation = models.FileField('Презентация', upload_to=path_and_rename("forum/", 'presentation')) def __str__(self): return self.name class Meta: verbose_name = 'Спикер' verbose_name_plural = 'Спикеры 2019'
class Publication(models.Model): """Публикация""" category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Категория', related_name='publications') author = models.ForeignKey(Author, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Автор', related_name='authors') title = models.CharField('Заголовок', max_length=255, db_index=True) image = models.ImageField('Изображение', upload_to=path_and_rename( 'publications/', 'image')) body = RichTextUploadingField('Публикация') public = models.BooleanField('Опубликовать', default=False) pub_date = models.DateTimeField('Дата публикации', auto_now_add=True) update = models.DateTimeField('Дата обновления', auto_now=True) views = models.PositiveSmallIntegerField('Кол-во просмотров', default=0) def __str__(self): return self.title def get_absolute_url(self): return reverse('publication_detail', kwargs={'pk': self.id}) class Meta: ordering = ('-pub_date', ) verbose_name = 'Публикация' verbose_name_plural = 'Публикации'
class Profile(models.Model): """Расширение пользователя""" user = models.OneToOneField(User, on_delete=models.CASCADE, default=User, verbose_name='Пользователь') jury = models.BooleanField('Статус жюри', default=False) partisipant = models.BooleanField('Статус участника', default=False) avatar = models.ImageField('Аватар (только для жюри)', null=True, upload_to=path_and_rename( "award_files/avatars/", 'jury'), blank=True) professional = models.CharField('Профессия (только для жюри)', max_length=200, null=True, blank=True) preview = RichTextUploadingField('Краткая информация(только для жюри)', null=True, blank=True) interview = models.TextField('Ссылка на интервью (только для жюри)', null=True, blank=True) def __str__(self): return self.user.first_name class Meta: verbose_name = 'Профиль' verbose_name_plural = 'Профили'
class AwardInfo(models.Model): """Информация о премии""" award_title = models.CharField('Блок премия - заголовок', max_length=200) award_description = RichTextUploadingField('Блок премия - описание') award_image = models.ImageField( 'Блок премия - картинка', upload_to=path_and_rename("site/", 'image'), help_text= 'не забудьте оптимизировать картинку на сайте https://tinypng.com/') jury_title = models.CharField('Блок жюри - заголовок', max_length=200) jury_description = RichTextUploadingField('Блок жюри - описание') involvement_title = models.CharField('Блок участие - заголовок', max_length=200) involvement_description = RichTextUploadingField('Блок участие - описание') votes_description = RichTextUploadingField( 'Блок голосование - описание (заголовок 3 уровня)', blank=True, null=True) votes_description_second = RichTextUploadingField( 'Блок голосование 2 - описание (заголовок 3 уровня)', blank=True, null=True) def __str__(self): return self.award_title class Meta: verbose_name = 'Премия общая информация' verbose_name_plural = 'Премия общая информация'
class Facilitator2020(models.Model): """Фасилитаторы 2020 """ table = models.PositiveSmallIntegerField('Номер стола') name = models.CharField('Имя фасилитатора', max_length=255) bio = RichTextUploadingField('Био', blank=True) company = models.CharField('Компания', max_length=255) company_logo = models.ImageField('Логотип компании', upload_to=path_and_rename("forum/", 'image'), null=True) avatar = models.ImageField('Фотография', upload_to=path_and_rename("forum/", 'image')) special_quest = models.BooleanField('Специальный гость', default=False) def __str__(self): return self.name class Meta: verbose_name = 'Фасилитатор' verbose_name_plural = 'Фасилитаторы 2020'
class ForumInfo(models.Model): """Общая информация о форуме""" title = models.CharField('Заголовок страницы форума', max_length=255) sub_title = models.CharField('Подзаголовок страницы форума', max_length=255) image = models.ImageField('Картинка', upload_to=path_and_rename("forum/", 'image'), help_text='Не забудьте оптимизировать на сайте https://tinypng.com/', null=True) forum_description_title = models.CharField('Заголовок блока с описанием', max_length=255) forum_description = RichTextUploadingField('Описание форума') info_blocks = models.ManyToManyField(InfoBlock, verbose_name='Блоки с информацией',) forum_2020_text = RichTextUploadingField('Текст (заглушка для форума 202)', blank=True) forum_2020 = models.ImageField('Заглушка для форума 2020', upload_to=path_and_rename("forum/", 'image'), null=True) def __str__(self): return self.title class Meta: verbose_name = 'Информация о форуме' verbose_name_plural = 'Информация о форуме'
class SubService(models.Model): """Раздел услуги""" title = models.CharField('Заголовок', max_length=255) description = RichTextUploadingField('Описание услуги') image = models.ImageField('Картинка услуги (необязательно)', upload_to=path_and_rename("service/", 'image'), blank=True, null=True) form = models.BooleanField('Форма заявки', default=False) form_resume = models.BooleanField('Форма с резюме', default=False) program = models.FileField('Программа (файл PDF)', upload_to=path_and_rename("service/", 'image'), null=True, blank=True) presentation_text = models.TextField('Текст, предлагающий скачать программу или презентацию', default='Ознакомиться с программой') btn_text = models.CharField('Текст на кнопке скачивания программы', default='Скачать', max_length=255) def __str__(self): return self.title def get_absolute_url(self): return reverse('subservice_detail', kwargs={'pk': self.id}) class Meta: verbose_name = 'Дополнительно - услуга' verbose_name_plural = 'Дополнительно - услуги'
class Author(models.Model): """Автор""" user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name='Пользователь') first_name = models.CharField('Имя автора', max_length=255, default='User', blank=True, null=True) last_name = models.CharField('Фамилия автора', max_length=255, blank=True, null=True) professional = models.CharField('Профессия', max_length=255, null=True, blank=True) company = models.CharField('Компания', max_length=255, null=True, blank=True) avatar = models.ImageField('Аватар (в формате 1:1)', upload_to=path_and_rename('authors/', 'avatar'), blank=True, null=True) background = models.ImageField('Фоновое изображение профиля', upload_to=path_and_rename('authors/', 'bg'), blank=True, null=True) bio = models.TextField('Bio', blank=True, null=True) def get_absolute_url(self): return reverse('profile', kwargs={'pk': self.id}) def __str__(self): return f'{self.first_name} {self.last_name}' class Meta: verbose_name = 'Автор' verbose_name_plural = 'Авторы'
class ServiceInfo(models.Model): """Общая информация""" title = models.CharField('Заголовок страницы со списком услуг', max_length=255, blank=True, null=True) text = RichTextUploadingField('Дополнительная информация на странице со списком услуг', blank=True, null=True) image = models.ImageField('Картинка на странице услуг', upload_to=path_and_rename("service/", 'image'), null=True, blank=True) def __str__(self): return self.title class Meta: verbose_name = 'Услуги - общая информация' verbose_name_plural = 'Услуги - общая информация'
class ForumPartner(models.Model): """Партнеры форума""" name = models.CharField('Название компании', max_length=255) image = models.ImageField('Логотип', upload_to=path_and_rename("forum/", 'image')) url = models.URLField('Ссылка на сайт', blank=True, null=True) def __str__(self): return self.name class Meta: verbose_name = 'Партнер форума' verbose_name_plural = 'Партнеры форума'
class InfoBlock(models.Model): """Блоки с информацией""" order = models.PositiveSmallIntegerField('Порядковый номер', null=True) image = models.ImageField('Картинка', upload_to=path_and_rename("forum/", 'image'), help_text='https://undraw.co/') title = models.CharField('Заголовок блока', max_length=255) description = models.TextField('Описание блока') def __str__(self): return self.title class Meta: verbose_name = 'Блок с описанием' verbose_name_plural = 'Блоки с описанием'
class ImageBlock(models.Model): """Блоки с картинками""" image = models.ImageField('Картинка', upload_to=path_and_rename("about/", 'image')) title = models.CharField('Заголовок', max_length=255) text = models.TextField('Текст') def __str__(self): return self.title class Meta: verbose_name = 'Блок с картинкой на странице о компании' verbose_name_plural = 'Блоки с картинкой на странице о компании'
class AboutUsInfo(models.Model): """Инофрмация о компании""" title = models.CharField('Заголовок страницы', max_length=255) text = RichTextUploadingField('Текст о компании') image = models.ImageField('Фото руководителя', upload_to=path_and_rename("about/", 'image')) photo_text = RichTextUploadingField('Текст под фото руководителя') def __str__(self): return self.title class Meta: verbose_name = 'Информация о компании' verbose_name_plural = 'Информация о компании'
class MainInfo(models.Model): """Основная информация""" title = models.CharField('Title сайта', max_length=255) description = models.TextField('Description', max_length=180, help_text='до 180 символово') favicon = models.ImageField('Иконка сайта', upload_to=path_and_rename('main/', 'favicon')) def __str__(self): return self.title class Meta: verbose_name = 'Заголовок, описание и иконка' verbose_name_plural = 'Заголовок, описание и иконка'
class Service(models.Model): """Услуга""" number = models.PositiveSmallIntegerField('Номер', null=True, blank=True) image = models.ImageField('Картинка услуги (необязательно)', upload_to=path_and_rename("service/", 'image'), blank=True, null=True) title = models.CharField('Заголовок - название услуги', max_length=255) description = RichTextUploadingField('Описание услуги') sub_service = models.ManyToManyField(SubService, verbose_name='Дополнительные услуги') def __str__(self): return self.title def get_absolute_url(self): return reverse('service_detail', kwargs={'pk': self.id}) class Meta: verbose_name = 'Услуга' verbose_name_plural = 'Услуги'
class ServiceContactResume(models.Model): """Заявка резюме""" name = models.CharField('ФИО', max_length=255) email = models.EmailField('Email') phone = models.CharField('Телефон', max_length=30) profile = models.ForeignKey(Profile, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Профиль') sphere = models.ForeignKey(Sphere, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Сфера') experience = models.ForeignKey(Experience, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Опыт работы') self_request = models.ForeignKey(SelfRequest, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='Запрос') resume = models.FileField('Файл', upload_to=path_and_rename("service_files/", 'resume')) def __str__(self): return self.name class Meta: verbose_name = 'Резюме' verbose_name_plural = 'Резюме'
class Person(models.Model): """Персона""" name = models.CharField('ФИО', max_length=255, db_index=True) position = models.CharField('Должность', max_length=255) company = models.CharField('Компания', max_length=255) image = models.ImageField('Изображение', upload_to=path_and_rename('persons/', 'image'), blank=True, null=True) body = RichTextUploadingField('Био') slug = models.SlugField('Slug', unique=True, help_text='маленькими буквами, без пробелов и спецсимволов') order = models.PositiveSmallIntegerField('Порядковые номер') def __str__(self): return self.name def get_absolute_url(self): return reverse('person_detail', kwargs={'slug': self.slug}) class Meta: ordering = ('order',) verbose_name = 'Персона' verbose_name_plural = 'Персоны'