diff --git a/services/backend/apps/competition/migrations/0002_alter_competition_image_url.py b/services/backend/apps/competition/migrations/0002_alter_competition_image_url.py new file mode 100644 index 0000000..6298789 --- /dev/null +++ b/services/backend/apps/competition/migrations/0002_alter_competition_image_url.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.6 on 2025-03-01 22:16 + +import apps.competition.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('competition', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='competition', + name='image_url', + field=models.ImageField(blank=True, null=True, upload_to=apps.competition.models.Competition.image_url_upload_to, verbose_name='изображение соревнования'), + ), + ] diff --git a/services/backend/apps/task/migrations/0002_alter_competitiontask_options.py b/services/backend/apps/task/migrations/0002_alter_competitiontask_options.py new file mode 100644 index 0000000..ad73842 --- /dev/null +++ b/services/backend/apps/task/migrations/0002_alter_competitiontask_options.py @@ -0,0 +1,17 @@ +# Generated by Django 5.1.6 on 2025-03-01 22:16 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('task', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='competitiontask', + options={'verbose_name': 'задание', 'verbose_name_plural': 'задания'}, + ), + ] diff --git a/services/backend/apps/team/__init__.py b/services/backend/apps/team/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/services/backend/apps/team/admin.py b/services/backend/apps/team/admin.py new file mode 100644 index 0000000..764c42e --- /dev/null +++ b/services/backend/apps/team/admin.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +from apps.team.models import Team + + +@admin.register(Team) +class TeamAdmin(admin.ModelAdmin): + list_display = ("name", "owner") + search_fields = ("name", "owner", "members",) diff --git a/services/backend/apps/team/apps.py b/services/backend/apps/team/apps.py new file mode 100644 index 0000000..5a9c7c0 --- /dev/null +++ b/services/backend/apps/team/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class TeamConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'apps.team' + verbose_name = "Команды" diff --git a/services/backend/apps/team/migrations/0001_initial.py b/services/backend/apps/team/migrations/0001_initial.py new file mode 100644 index 0000000..65f560b --- /dev/null +++ b/services/backend/apps/team/migrations/0001_initial.py @@ -0,0 +1,30 @@ +# Generated by Django 5.1.6 on 2025-03-01 22:16 + +import django.db.models.deletion +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('user', '0002_alter_user_email_alter_user_password_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Team', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=50, verbose_name='название')), + ('members', models.ManyToManyField(related_name='team_members', to='user.user', verbose_name='участники')), + ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='user.user', verbose_name='владелец')), + ], + options={ + 'verbose_name': 'команда', + 'verbose_name_plural': 'команды', + }, + ), + ] diff --git a/services/backend/apps/team/migrations/__init__.py b/services/backend/apps/team/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/services/backend/apps/team/models.py b/services/backend/apps/team/models.py new file mode 100644 index 0000000..afee8c8 --- /dev/null +++ b/services/backend/apps/team/models.py @@ -0,0 +1,19 @@ +from django.db import models + +from apps.core.models import BaseModel +from apps.user.models import User + + +class Team(BaseModel): + name = models.CharField(max_length=50, verbose_name="название") + owner = models.ForeignKey(User, on_delete=models.CASCADE, + verbose_name="владелец") + members = models.ManyToManyField(User, related_name="team_members", + verbose_name="участники") + + def __str__(self): + return self.name + + class Meta: + verbose_name = "команда" + verbose_name_plural = "команды" diff --git a/services/backend/config/settings.py b/services/backend/config/settings.py index 45b28ed..6bf014b 100644 --- a/services/backend/config/settings.py +++ b/services/backend/config/settings.py @@ -448,6 +448,7 @@ INSTALLED_APPS = [ "apps.competition", "apps.review", "apps.task", + "apps.team", ] # tinymce