67 lines
2.9 KiB
Python
67 lines
2.9 KiB
Python
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:
|
||
db_table = "profile"
|
||
verbose_name = "Профиль"
|
||
verbose_name_plural = "Профили"
|
||
|
||
def __str__(self):
|
||
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):
|
||
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):
|
||
return self.group |