Files
resume/cv/models.py
Pavel Sobolev d5ff05abdb add linters
2025-11-13 01:33:00 +03:00

87 lines
3.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Модели профиля резюме, опыта и групп навыков."""
from django.db import models
class Profile(models.Model):
"""Профиль пользователя с контактами и базовой информацией."""
GENDER_CHOICES = [
("male", "Мужской"),
("female", "Женский"),
]
full_name = models.CharField(max_length=200, verbose_name="ФИО")
role = models.CharField(max_length=120, verbose_name="Роль")
gender = models.CharField(max_length=10, choices=GENDER_CHOICES, verbose_name="Пол")
summary = models.TextField(verbose_name="Краткое описание")
location = models.CharField(max_length=120, verbose_name="Местоположение")
languages = models.JSONField(default=list, verbose_name="Языки")
email = models.EmailField(null=True, blank=True, verbose_name="Email")
phone = models.CharField(max_length=20, null=True, blank=True, verbose_name="Телефон")
telegram = models.CharField(max_length=40, null=True, blank=True, verbose_name="Telegram")
git = models.URLField(null=True, blank=True, verbose_name="Git")
photo = models.ImageField(upload_to="photos/", null=True, blank=True, verbose_name="Фото")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания")
updated_at = models.DateTimeField(auto_now=True, verbose_name="Дата обновления")
class Meta:
"""Метаданные модели профиля для Django админки и БД."""
db_table = "profile"
verbose_name = "Профиль"
verbose_name_plural = "Профили"
def __str__(self) -> str:
"""Строковое представление профиля."""
return self.full_name
class Experience(models.Model):
"""Запись опыта работы, связанная с профилем."""
profile = models.ForeignKey(
Profile, on_delete=models.CASCADE, related_name="experience", verbose_name="Профиль"
)
company = models.CharField(max_length=200, verbose_name="Компания")
start_date = models.DateField(verbose_name="Дата начала")
end_date = models.DateField(null=True, blank=True, verbose_name="Дата окончания")
summary = models.TextField(verbose_name="Краткое описание")
achievements = models.JSONField(default=list, verbose_name="Достижения")
tech = models.JSONField(default=list, verbose_name="Технологии")
class Meta:
"""Метаданные модели опыта работы: сортировка и отображение."""
db_table = "experience"
ordering = ["-start_date"]
verbose_name = "Опыт работы"
verbose_name_plural = "Опыт работы"
def __str__(self) -> str:
"""Строковое представление записи опыта работы."""
return f"{self.profile.full_name} - {self.company}"
class SkillGroup(models.Model):
"""Группы навыков с массивом значений, как в JSON."""
profile = models.ForeignKey(
Profile, on_delete=models.CASCADE, related_name="skills_map", verbose_name="Профиль"
)
group = models.CharField(max_length=100, verbose_name="Группа")
items = models.JSONField(default=list, verbose_name="Элементы")
class Meta:
"""Метаданные модели группы навыков."""
db_table = "skill_group"
verbose_name = "Группа навыков"
verbose_name_plural = "Группы навыков"
def __str__(self) -> str:
"""Строковое представление группы навыков."""
return self.group