Files
smartsoltech_site/smartsoltech/web/migrations/0013_career_team.py
Andrey K. Choi ec01a2ae10 👥 Добавлено управление персоналом и карьерой
 Новые функции:
- 🧑‍💻 Team модель для управления сотрудниками
  • Полная информация о персонале (имя, должность, отдел)
  • Фотографии и контактные данные
  • Социальные сети (LinkedIn, GitHub, Telegram)
  • Навыки и опыт работы
  • Гибкие настройки отображения

- 💼 Career модель для вакансий
  • Детальное описание позиций
  • Требования и обязанности
  • Зарплатные вилки
  • Типы занятости и уровни опыта
  • Статусы вакансий и дедлайны

🔧 Админ-панель:
- Удобные интерфейсы для HR-менеджмента
- Группировка полей и фильтрация
- Быстрые действия для массовых операций
- Сортировка по приоритету

📊 База данных:
- Миграция 0013_career_team.py
- Оптимизированные индексы и связи
2025-11-25 15:44:57 +09:00

76 lines
6.1 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.

# Generated by Django 5.1.1 on 2025-11-25 06:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('web', '0012_contactinfo'),
]
operations = [
migrations.CreateModel(
name='Career',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200, verbose_name='Название вакансии')),
('department', models.CharField(max_length=100, verbose_name='Отдел')),
('location', models.CharField(default='Кванджу, Южная Корея', max_length=200, verbose_name='Местоположение')),
('employment_type', models.CharField(choices=[('full_time', 'Полная занятость'), ('part_time', 'Частичная занятость'), ('contract', 'Контракт'), ('internship', 'Стажировка'), ('remote', 'Удаленная работа'), ('freelance', 'Фриланс')], default='full_time', max_length=20, verbose_name='Тип занятости')),
('experience_level', models.CharField(choices=[('junior', 'Junior (0-1 год)'), ('middle', 'Middle (2-4 года)'), ('senior', 'Senior (5+ лет)'), ('lead', 'Team Lead'), ('intern', 'Стажер')], default='middle', max_length=20, verbose_name='Уровень опыта')),
('description', models.TextField(verbose_name='Описание вакансии')),
('responsibilities', models.TextField(verbose_name='Обязанности')),
('requirements', models.TextField(verbose_name='Требования')),
('benefits', models.TextField(blank=True, verbose_name='Преимущества и условия')),
('salary_min', models.PositiveIntegerField(blank=True, null=True, verbose_name='Зарплата от (₩)')),
('salary_max', models.PositiveIntegerField(blank=True, null=True, verbose_name='Зарплата до (₩)')),
('salary_currency', models.CharField(default='KRW', max_length=10, verbose_name='Валюта')),
('required_skills', models.TextField(help_text='Разделите навыки запятыми', verbose_name='Обязательные навыки')),
('preferred_skills', models.TextField(blank=True, help_text='Разделите навыки запятыми', verbose_name='Желательные навыки')),
('status', models.CharField(choices=[('active', 'Активная'), ('paused', 'Приостановлена'), ('closed', 'Закрыта'), ('draft', 'Черновик')], default='active', max_length=20, verbose_name='Статус')),
('is_featured', models.BooleanField(default=False, verbose_name='Рекомендуемая вакансия')),
('application_deadline', models.DateField(blank=True, null=True, verbose_name='Дедлайн подачи заявок')),
('contact_email', models.EmailField(default='hr@smartsoltech.kr', max_length=254, verbose_name='Email для связи')),
('contact_person', models.CharField(blank=True, max_length=200, verbose_name='Контактное лицо')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('published_at', models.DateTimeField(blank=True, null=True, verbose_name='Дата публикации')),
],
options={
'verbose_name': 'Вакансия',
'verbose_name_plural': 'Карьера',
'ordering': ['-is_featured', '-published_at', '-created_at'],
},
),
migrations.CreateModel(
name='Team',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=100, verbose_name='Имя')),
('last_name', models.CharField(max_length=100, verbose_name='Фамилия')),
('position', models.CharField(max_length=200, verbose_name='Должность')),
('department', models.CharField(blank=True, max_length=100, verbose_name='Отдел')),
('bio', models.TextField(blank=True, verbose_name='Биография/Описание')),
('photo', models.ImageField(blank=True, null=True, upload_to='static/img/team/', verbose_name='Фотография')),
('email', models.EmailField(blank=True, max_length=254, verbose_name='Email')),
('phone', models.CharField(blank=True, max_length=20, verbose_name='Телефон')),
('linkedin', models.URLField(blank=True, verbose_name='LinkedIn')),
('github', models.URLField(blank=True, verbose_name='GitHub')),
('telegram', models.CharField(blank=True, max_length=100, verbose_name='Telegram')),
('skills', models.TextField(blank=True, help_text='Разделите навыки запятыми', verbose_name='Навыки')),
('experience_years', models.PositiveIntegerField(default=0, verbose_name='Лет опыта')),
('is_active', models.BooleanField(default=True, verbose_name='Активен')),
('display_order', models.PositiveIntegerField(default=0, verbose_name='Порядок отображения')),
('show_on_about', models.BooleanField(default=True, verbose_name='Показывать на странице О нас')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
options={
'verbose_name': 'Сотрудник',
'verbose_name_plural': 'Команда',
'ordering': ['display_order', 'last_name', 'first_name'],
},
),
]