From 576f5b06e0597fbe66885a116cbc763708b71599 Mon Sep 17 00:00:00 2001 From: Olesya Orlenko Date: Wed, 7 Feb 2024 19:04:19 +0300 Subject: [PATCH] feat:add/change some project_model fields after the review --- src/backend/config/settings/base.py | 1 + src/backend/project/admin.py | 6 ++- src/backend/project/constants.py | 11 ++-- ...ecialist_options_alter_project_busyness.py | 27 ++++++++++ ...recruitment_status_alter_project_status.py | 31 +++++++++++ .../migrations/0004_alter_project_busyness.py | 19 +++++++ src/backend/project/models.py | 51 ++++++++++++++----- 7 files changed, 124 insertions(+), 22 deletions(-) create mode 100644 src/backend/project/migrations/0002_alter_specialist_options_alter_project_busyness.py create mode 100644 src/backend/project/migrations/0003_project_recruitment_status_alter_project_status.py create mode 100644 src/backend/project/migrations/0004_alter_project_busyness.py diff --git a/src/backend/config/settings/base.py b/src/backend/config/settings/base.py index 0176b9f..b138950 100644 --- a/src/backend/config/settings/base.py +++ b/src/backend/config/settings/base.py @@ -30,6 +30,7 @@ ] LOCAL_APPS: list = [ + "apps.general", "project", ] diff --git a/src/backend/project/admin.py b/src/backend/project/admin.py index d9d1261..0cd6539 100644 --- a/src/backend/project/admin.py +++ b/src/backend/project/admin.py @@ -1,5 +1,6 @@ from django.contrib import admin +from .constants import LIST_PER_PAGE from .models import Level, Project, Skill, Specialist, Specialization, Status @@ -44,14 +45,15 @@ class ProjectAdmin(admin.ModelAdmin): "duration", "level", "busyness", + "recruitment_status", "status", ) list_filter = ("level", "busyness", "status") search_fields = ("name", "description", "purpose", "creator__username") readonly_fields = ("duration",) - list_per_page = 10 + list_per_page = LIST_PER_PAGE def duration(self, instance): return instance.duration - duration.short_description = "Продолжительность в месяцах" + duration.short_description = "Продолжительность в днях" diff --git a/src/backend/project/constants.py b/src/backend/project/constants.py index ba242d1..e10495d 100644 --- a/src/backend/project/constants.py +++ b/src/backend/project/constants.py @@ -1,8 +1,7 @@ -BUSYNESS_LENGTH = 20 -BUSYNESS_CHOICES = [ - ("full_time", "Полная занятость"), - ("part_time", "Частичная занятость"), -] -DAYS_IN_MONTH = 30 DESCRIPTION_LENGTH = 3000 +LIST_PER_PAGE = 10 NAME_LENGTH = 100 +STATUS_CHOICES = [ + (1, "Набор открыт"), + (2, "Набор закрыт"), +] diff --git a/src/backend/project/migrations/0002_alter_specialist_options_alter_project_busyness.py b/src/backend/project/migrations/0002_alter_specialist_options_alter_project_busyness.py new file mode 100644 index 0000000..dad2b47 --- /dev/null +++ b/src/backend/project/migrations/0002_alter_specialist_options_alter_project_busyness.py @@ -0,0 +1,27 @@ +# Generated by Django 5.0.1 on 2024-02-07 14:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("project", "0001_initial"), + ] + + operations = [ + migrations.AlterModelOptions( + name="specialist", + options={ + "verbose_name": "Специалист", + "verbose_name_plural": "Специалисты", + }, + ), + migrations.AlterField( + model_name="project", + name="busyness", + field=models.IntegerField( + choices=[(1, "Полная занятость"), (2, "Частичная занятость")], + verbose_name="Занятость", + ), + ), + ] diff --git a/src/backend/project/migrations/0003_project_recruitment_status_alter_project_status.py b/src/backend/project/migrations/0003_project_recruitment_status_alter_project_status.py new file mode 100644 index 0000000..b5317b0 --- /dev/null +++ b/src/backend/project/migrations/0003_project_recruitment_status_alter_project_status.py @@ -0,0 +1,31 @@ +# Generated by Django 5.0.1 on 2024-02-07 15:28 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("project", "0002_alter_specialist_options_alter_project_busyness"), + ] + + operations = [ + migrations.AddField( + model_name="project", + name="recruitment_status", + field=models.IntegerField( + choices=[(1, "Набор открыт"), (2, "Набор закрыт")], + default=1, + verbose_name="Статус набора участников", + ), + ), + migrations.AlterField( + model_name="project", + name="status", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="project.status", + verbose_name="Статус проекта", + ), + ), + ] diff --git a/src/backend/project/migrations/0004_alter_project_busyness.py b/src/backend/project/migrations/0004_alter_project_busyness.py new file mode 100644 index 0000000..d29ed9a --- /dev/null +++ b/src/backend/project/migrations/0004_alter_project_busyness.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.1 on 2024-02-07 15:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("project", "0003_project_recruitment_status_alter_project_status"), + ] + + operations = [ + migrations.AlterField( + model_name="project", + name="busyness", + field=models.IntegerField( + verbose_name="Занятость в часах в неделю" + ), + ), + ] diff --git a/src/backend/project/models.py b/src/backend/project/models.py index 401d55b..9f3eb0b 100644 --- a/src/backend/project/models.py +++ b/src/backend/project/models.py @@ -3,18 +3,16 @@ from apps.general.models import CreatedModifiedFields -from .constants import ( - BUSYNESS_CHOICES, - BUSYNESS_LENGTH, - DAYS_IN_MONTH, - DESCRIPTION_LENGTH, - NAME_LENGTH, -) +from .constants import DESCRIPTION_LENGTH, NAME_LENGTH, STATUS_CHOICES User = get_user_model() class Specialization(models.Model): + """ + Модель представляющая специализацию, подразделяется на специальности. + """ + name = models.CharField("Название", max_length=NAME_LENGTH) quantity = models.PositiveSmallIntegerField() @@ -27,6 +25,10 @@ def __str__(self) -> str: class Specialist(models.Model): + """ + Модель представляющая специальность(специалиста), входящую в специализацию. + """ + specialization = models.ForeignKey( Specialization, on_delete=models.CASCADE, @@ -44,6 +46,10 @@ def __str__(self) -> str: class Level(models.Model): + """ + Модель представляющая уровень участников. + """ + name = models.CharField("Название", max_length=NAME_LENGTH) class Meta: @@ -55,6 +61,10 @@ def __str__(self) -> str: class Status(models.Model): + """ + Модель представляющая статус проекта. + """ + name = models.CharField("Название", max_length=NAME_LENGTH) class Meta: @@ -66,6 +76,10 @@ def __str__(self) -> str: class Skill(models.Model): + """ + Модель представляющая необходимые для проекта навыки. + """ + name = models.CharField("Название", max_length=NAME_LENGTH) class Meta: @@ -77,6 +91,10 @@ def __str__(self) -> str: class Project(CreatedModifiedFields): + """ + Модель представляющая проект. + """ + name = models.CharField("Название проекта", max_length=NAME_LENGTH) description = models.TextField( "Описание проекта", max_length=DESCRIPTION_LENGTH @@ -105,23 +123,28 @@ class Project(CreatedModifiedFields): related_name="projects", verbose_name="Навыки", ) - busyness = models.CharField( - max_length=BUSYNESS_LENGTH, - choices=BUSYNESS_CHOICES, - verbose_name="Занятость", + busyness = models.IntegerField( + verbose_name="Занятость в часах в неделю", + ) + recruitment_status = models.IntegerField( + choices=STATUS_CHOICES, + verbose_name="Статус набора участников", + default=1, ) status = models.ForeignKey( Status, on_delete=models.CASCADE, - verbose_name="Статус", + verbose_name="Статус проекта", ) @property def duration(self): + """ + Вычисляет и возвращает продолжительность проекта в днях. + """ if self.ended is not None and self.started is not None: duration = self.ended - self.started - months = duration.days // DAYS_IN_MONTH - return months + return duration.days return None duration.fget.short_description = "Продолжительность"