Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions vacancy/constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from enum import Enum


class ChoicesMixin:

@classmethod
def choices(cls):
"""Return a list of tuples (value, display_name) for choices."""
return [(item.value, item.value) for item in cls]


class WorkExperience(ChoicesMixin, Enum):

NO_EXPERIENCE: str = "Без опыта"
UP_TO_A_YEAR: str = "До 1 года"
FROM_ONE_TO_THREE_YEARS: str = "От 1 года до 3 лет"
FROM_THREE_YEARS: str = "От 3 лет и более"


class WorkSchedule(ChoicesMixin, Enum):

FULL_TIME: str = "Полный рабочий день"
SHIFT_WORK: str = "Сменный график"
FLEXIBLE_SCHEDULE: str = "Гибкий график"
PART_TIME: str = "Частичная занятость"
INTERNSHIP: str = "Стажировка"


class WorkFormat(ChoicesMixin, Enum):

REMOTE: str = "Удаленная работа"
OFFICE: str = "Работа в офисе"
HYBRID: str = "Смешанная"
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Generated by Django 4.2.11 on 2024-12-02 17:37

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("vacancy", "0006_vacancy_datetime_closed"),
]

operations = [
migrations.AddField(
model_name="vacancy",
name="required_experience",
field=models.CharField(
blank=True,
choices=[
("Без опыта", "Без опыта"),
("До 1 года", "До 1 года"),
("От 1 года до 3 лет", "От 1 года до 3 лет"),
("От 3 лет и более", "От 3 лет и более"),
],
max_length=50,
null=True,
verbose_name="Требуемый опыт",
),
),
migrations.AddField(
model_name="vacancy",
name="work_format",
field=models.CharField(
blank=True,
choices=[
("Удаленная работа", "Удаленная работа"),
("Работа в офисе", "Работа в офисе"),
("Смешанная", "Смешанная"),
],
max_length=50,
null=True,
verbose_name="Формат работы",
),
),
migrations.AddField(
model_name="vacancy",
name="work_schedule",
field=models.CharField(
blank=True,
choices=[
("Полный рабочий день", "Полный рабочий день"),
("Сменный график", "Сменный график"),
("Гибкий график", "Гибкий график"),
("Частичная занятость", "Частичная занятость"),
("Стажировка", "Стажировка"),
],
max_length=50,
null=True,
verbose_name="График работы",
),
),
]
41 changes: 35 additions & 6 deletions vacancy/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from files.models import UserFile
from projects.models import Project
from vacancy.constants import WorkExperience, WorkSchedule, WorkFormat
from vacancy.managers import VacancyManager, VacancyResponseManager
from django_stubs_ext.db.models import TypedModelMeta

Expand All @@ -16,6 +17,9 @@ class Vacancy(models.Model):
role: A CharField title of the vacancy.
required_skills: A GenericRelation of required skills for the vacancy.
description: A TextField description of the vacancy.
required_experience: CharField (choice).
work_schedule: CharField (choice).
work_format: CharField (choice).
project: A ForeignKey referring to the Company model.
is_active: A boolean indicating if Vacancy is active.
datetime_created: A DateTimeField indicating date of creation.
Expand All @@ -28,24 +32,49 @@ class Vacancy(models.Model):
related_query_name="vacancies",
)
description = models.TextField(blank=True)
required_experience = models.CharField(
max_length=50,
choices=WorkExperience.choices(),
blank=True,
null=True,
verbose_name="Требуемый опыт",
)
work_schedule = models.CharField(
max_length=50,
choices=WorkSchedule.choices(),
blank=True,
null=True,
verbose_name="График работы",
)
work_format = models.CharField(
max_length=50,
choices=WorkFormat.choices(),
blank=True,
null=True,
verbose_name="Формат работы",
)
project = models.ForeignKey(
Project,
on_delete=models.CASCADE,
null=False,
related_name="vacancies",
)

is_active = models.BooleanField(blank=False, default=True)

datetime_created = models.DateTimeField(
verbose_name="Дата создания", null=False, auto_now_add=True
null=False,
auto_now_add=True,
verbose_name="Дата создания",
)
datetime_updated = models.DateTimeField(
verbose_name="Дата обновления", null=False, auto_now=True
null=False,
auto_now=True,
verbose_name="Дата обновления",
)
datetime_closed = models.DateTimeField(
verbose_name="Дата закрытия", null=True, blank=True
null=True,
blank=True,
verbose_name="Дата закрытия",
)
is_active = models.BooleanField(blank=False, default=True)

objects = VacancyManager()

Expand Down
6 changes: 6 additions & 0 deletions vacancy/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,9 @@ class Meta:
"datetime_updated",
"datetime_closed",
"response_count",
"required_experience",
"work_schedule",
"work_format",
]
read_only_fields = ["project"]

Expand Down Expand Up @@ -202,6 +205,9 @@ class Meta:
"is_active",
"datetime_closed",
"response_count",
"required_experience",
"work_schedule",
"work_format",
]


Expand Down
Loading