129 lines
2.7 KiB
Python
129 lines
2.7 KiB
Python
from django.contrib.auth.models import AbstractUser
|
|
from django.core import validators
|
|
from django.db import models
|
|
|
|
|
|
class AbstractTag(models.Model):
|
|
name = models.CharField(
|
|
max_length=255,
|
|
unique=True,
|
|
)
|
|
|
|
class Meta:
|
|
abstract = True
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class Tag(AbstractTag):
|
|
pass
|
|
|
|
|
|
class Skill(AbstractTag):
|
|
level = models.IntegerField(
|
|
validators=[
|
|
validators.MinValueValidator(1),
|
|
validators.MaxValueValidator(10),
|
|
],
|
|
verbose_name="уровень навыка",
|
|
)
|
|
|
|
|
|
class Specialization(AbstractTag):
|
|
pass
|
|
|
|
|
|
class Achievements(models.Model):
|
|
name = models.CharField(
|
|
max_length=255,
|
|
verbose_name="Название достижения",
|
|
)
|
|
|
|
info = models.TextField(
|
|
max_length=255,
|
|
verbose_name="Информация про достижение",
|
|
)
|
|
|
|
file = models.FileField(
|
|
upload_to="achievements",
|
|
verbose_name="Файл достижения",
|
|
)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class User(AbstractUser):
|
|
email = models.EmailField("электронная почта", unique=True)
|
|
|
|
birthday = models.DateField(
|
|
verbose_name="дата рождения",
|
|
help_text="Введите дату рождения",
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
|
|
avatar = models.ImageField(
|
|
upload_to="avatars",
|
|
blank=True,
|
|
verbose_name="Аватарка",
|
|
)
|
|
|
|
country = models.CharField(
|
|
blank=True,
|
|
max_length=255,
|
|
verbose_name="страна",
|
|
)
|
|
|
|
city = models.CharField(
|
|
blank=True,
|
|
max_length=255,
|
|
verbose_name="город",
|
|
)
|
|
|
|
bio = models.TextField(
|
|
blank=True,
|
|
validators=[
|
|
validators.MaxLengthValidator(
|
|
512,
|
|
),
|
|
],
|
|
verbose_name="обо мне",
|
|
)
|
|
|
|
skills = models.ManyToManyField(
|
|
Skill,
|
|
blank=True,
|
|
verbose_name="технологии",
|
|
)
|
|
|
|
tag = models.ManyToManyField(
|
|
Tag,
|
|
blank=True,
|
|
verbose_name="теги",
|
|
)
|
|
|
|
experience = models.IntegerField(
|
|
validators=[
|
|
validators.MinValueValidator(0),
|
|
validators.MinValueValidator(100),
|
|
],
|
|
verbose_name="опыт работы",
|
|
null=True,
|
|
)
|
|
|
|
achievements = models.ManyToManyField(
|
|
Achievements,
|
|
blank=True,
|
|
verbose_name="достижения",
|
|
)
|
|
|
|
specialization = models.ForeignKey(
|
|
Specialization,
|
|
on_delete=models.CASCADE,
|
|
blank=True,
|
|
verbose_name="специализация",
|
|
null=True,
|
|
)
|