Skip to content

Commit

Permalink
feat:add/change some project_model fields after the review
Browse files Browse the repository at this point in the history
  • Loading branch information
olees-orlenko committed Feb 7, 2024
1 parent 8d87dcb commit 576f5b0
Show file tree
Hide file tree
Showing 7 changed files with 124 additions and 22 deletions.
1 change: 1 addition & 0 deletions src/backend/config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
]

LOCAL_APPS: list = [
"apps.general",
"project",
]

Expand Down
6 changes: 4 additions & 2 deletions src/backend/project/admin.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django.contrib import admin

from .constants import LIST_PER_PAGE
from .models import Level, Project, Skill, Specialist, Specialization, Status


Expand Down Expand Up @@ -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 = "Продолжительность в днях"
11 changes: 5 additions & 6 deletions src/backend/project/constants.py
Original file line number Diff line number Diff line change
@@ -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, "Набор закрыт"),
]
Original file line number Diff line number Diff line change
@@ -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="Занятость",
),
),
]
Original file line number Diff line number Diff line change
@@ -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="Статус проекта",
),
),
]
19 changes: 19 additions & 0 deletions src/backend/project/migrations/0004_alter_project_busyness.py
Original file line number Diff line number Diff line change
@@ -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="Занятость в часах в неделю"
),
),
]
51 changes: 37 additions & 14 deletions src/backend/project/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand All @@ -27,6 +25,10 @@ def __str__(self) -> str:


class Specialist(models.Model):
"""
Модель представляющая специальность(специалиста), входящую в специализацию.
"""

specialization = models.ForeignKey(
Specialization,
on_delete=models.CASCADE,
Expand All @@ -44,6 +46,10 @@ def __str__(self) -> str:


class Level(models.Model):
"""
Модель представляющая уровень участников.
"""

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

class Meta:
Expand All @@ -55,6 +61,10 @@ def __str__(self) -> str:


class Status(models.Model):
"""
Модель представляющая статус проекта.
"""

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

class Meta:
Expand All @@ -66,6 +76,10 @@ def __str__(self) -> str:


class Skill(models.Model):
"""
Модель представляющая необходимые для проекта навыки.
"""

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

class Meta:
Expand All @@ -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
Expand Down Expand Up @@ -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 = "Продолжительность"
Expand Down

0 comments on commit 576f5b0

Please sign in to comment.