This commit is contained in:
2025-11-24 11:31:29 +09:00
parent ce7119e9e9
commit 1da6180658
30 changed files with 4352 additions and 272 deletions

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.1.1 on 2025-11-24 00:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('web', '0011_teammember'),
]
operations = [
migrations.AlterField(
model_name='teammember',
name='telegram',
field=models.CharField(blank=True, help_text='Username без @ (например: trevor1985)', max_length=100, verbose_name='Telegram'),
),
]

View File

@@ -0,0 +1,140 @@
# Generated by Django 5.1.1 on 2025-11-24 00:41
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('web', '0012_alter_teammember_telegram'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='CareerVacancy',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200)),
('slug', models.SlugField(blank=True, max_length=220, unique=True)),
('location', models.CharField(blank=True, max_length=200)),
('employment_type', models.CharField(choices=[('FT', 'Полная занятость'), ('PT', 'Частичная занятость'), ('CT', 'Контракт'), ('IN', 'Стажировка')], default='FT', max_length=2)),
('responsibilities', models.TextField()),
('requirements', models.TextField()),
('desirable', models.TextField(blank=True)),
('salary_min', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True)),
('salary_max', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True)),
('is_active', models.BooleanField(default=True)),
('posted_at', models.DateTimeField(auto_now_add=True)),
],
options={
'verbose_name': 'Вакансия',
'verbose_name_plural': 'Вакансии',
'ordering': ['-posted_at'],
},
),
migrations.CreateModel(
name='NewsArticle',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200)),
('slug', models.SlugField(blank=True, max_length=220, unique=True)),
('excerpt', models.CharField(blank=True, max_length=300)),
('content', models.TextField()),
('image', models.ImageField(blank=True, null=True, upload_to='static/img/news/')),
('is_published', models.BooleanField(default=False)),
('published_date', models.DateTimeField(blank=True, null=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
options={
'verbose_name': 'Новость',
'verbose_name_plural': 'Новости',
'ordering': ['-published_date', '-created_at'],
},
),
migrations.CreateModel(
name='PrivacyPolicy',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('version', models.CharField(default='1.0', max_length=50)),
('content', models.TextField()),
('effective_date', models.DateField(auto_now_add=True)),
('is_active', models.BooleanField(default=True)),
],
options={
'verbose_name': 'Политика конфиденциальности',
'verbose_name_plural': 'Политики конфиденциальности',
},
),
migrations.CreateModel(
name='TermsOfUse',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('version', models.CharField(default='1.0', max_length=50)),
('content', models.TextField()),
('effective_date', models.DateField(auto_now_add=True)),
('is_active', models.BooleanField(default=True)),
],
options={
'verbose_name': 'Условия использования',
'verbose_name_plural': 'Условия использования',
},
),
migrations.AlterModelOptions(
name='blogpost',
options={'ordering': ['-published_date'], 'verbose_name': 'Запись блога', 'verbose_name_plural': 'Записи блога'},
),
migrations.AddField(
model_name='blogpost',
name='author',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blog_posts', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='blogpost',
name='excerpt',
field=models.CharField(blank=True, max_length=400),
),
migrations.AddField(
model_name='blogpost',
name='slug',
field=models.SlugField(blank=True, max_length=220, unique=True),
),
migrations.AddField(
model_name='blogpost',
name='status',
field=models.CharField(choices=[('draft', 'Черновик'), ('published', 'Опубликовано')], default='draft', max_length=20),
),
migrations.AddField(
model_name='blogpost',
name='updated_at',
field=models.DateTimeField(auto_now=True),
),
migrations.AddField(
model_name='blogpost',
name='views',
field=models.PositiveIntegerField(default=0),
),
migrations.CreateModel(
name='PortfolioItem',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200)),
('slug', models.SlugField(blank=True, max_length=220, unique=True)),
('description', models.TextField()),
('client_name', models.CharField(blank=True, max_length=200)),
('completion_date', models.DateField(blank=True, null=True)),
('image', models.ImageField(blank=True, null=True, upload_to='static/img/portfolio/')),
('featured', models.BooleanField(default=False)),
('is_active', models.BooleanField(default=True)),
('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='portfolio_items', to='web.category')),
],
options={
'verbose_name': 'Портфолио',
'verbose_name_plural': 'Портфолио',
'ordering': ['-completion_date'],
},
),
]