Skip to content

Commit fe0dcd9

Browse files
authored
Merge pull request #523 from PROCOLLAB-github/feature/project-mospolytech-data
Feature/project mospolytech data
2 parents 8888816 + c49c9a3 commit fe0dcd9

7 files changed

Lines changed: 86 additions & 5 deletions

File tree

invites/admin.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,11 @@
55

66
@admin.register(Invite)
77
class InviteAdmin(admin.ModelAdmin):
8-
fields = ["project", "user", "motivational_letter", "role", "is_accepted"]
8+
fields = [
9+
"project",
10+
"user",
11+
"motivational_letter",
12+
"role",
13+
"specialization",
14+
"is_accepted",
15+
]
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 4.2.11 on 2025-07-08 11:18
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("invites", "0001_initial"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="invite",
15+
name="specialization",
16+
field=models.CharField(
17+
blank=True,
18+
default=None,
19+
max_length=100,
20+
null=True,
21+
verbose_name="Специализация",
22+
),
23+
),
24+
]

invites/models.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from django.db import models
2+
from django_stubs_ext.db.models import TypedModelMeta
23

34
from invites.managers import InviteManager
45
from projects.models import Project
56
from users.models import CustomUser
6-
from django_stubs_ext.db.models import TypedModelMeta
77

88

99
class Invite(models.Model):
@@ -27,6 +27,13 @@ class Invite(models.Model):
2727
max_length=4096, blank=True, null=True, default=None
2828
)
2929
role = models.CharField(max_length=128, blank=True, null=True)
30+
specialization = models.CharField(
31+
max_length=100,
32+
blank=True,
33+
null=True,
34+
default=None,
35+
verbose_name="Специализация",
36+
)
3037
is_accepted = models.BooleanField(blank=False, null=True, default=None)
3138

3239
datetime_created = models.DateTimeField(
@@ -39,7 +46,9 @@ class Invite(models.Model):
3946
objects = InviteManager()
4047

4148
def __str__(self) -> str:
42-
return f'Invite from project "{self.project.name}" to {self.user.get_full_name()}'
49+
return (
50+
f'Invite from project "{self.project.name}" to {self.user.get_full_name()}'
51+
)
4352

4453
class Meta(TypedModelMeta):
4554
verbose_name = "Приглашение"

invites/serializers.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ class Meta:
2121
class InviteDetailSerializer(serializers.ModelSerializer[Invite]):
2222
user = UserDetailSerializer(many=False, read_only=True)
2323
project = ProjectListSerializer(many=False, read_only=True)
24+
specialization = serializers.CharField(
25+
required=False, allow_null=True, allow_blank=True
26+
)
2427

2528
class Meta:
2629
model = Invite
@@ -30,6 +33,7 @@ class Meta:
3033
"user",
3134
"motivational_letter",
3235
"role",
36+
"specialization",
3337
"is_accepted",
3438
"datetime_created",
3539
"datetime_updated",

invites/views.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from invites.filters import InviteFilter
66
from invites.models import Invite
7-
from invites.serializers import InviteListSerializer, InviteDetailSerializer
7+
from invites.serializers import InviteDetailSerializer, InviteListSerializer
88
from projects.models import Collaborator
99

1010

@@ -49,7 +49,10 @@ def post(self, request, *args, **kwargs):
4949
return Response(status=status.HTTP_403_FORBIDDEN)
5050
# add user to project collaborators
5151
Collaborator.objects.create(
52-
user=invite.user, project=invite.project, role=invite.role
52+
user=invite.user,
53+
project=invite.project,
54+
role=invite.role,
55+
specialization=invite.specialization,
5356
)
5457
invite.is_accepted = True
5558
invite.save()
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Generated by Django 4.2.11 on 2025-07-08 11:18
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("projects", "0025_remove_project_specialty"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="collaborator",
15+
name="specialization",
16+
field=models.CharField(
17+
blank=True,
18+
default=None,
19+
help_text="Направления работы участника в рамках проекта",
20+
max_length=100,
21+
null=True,
22+
verbose_name="Специализация",
23+
),
24+
),
25+
]

projects/models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ class Collaborator(models.Model):
264264
user: A ForeignKey referencing the user who is collaborating in the project.
265265
project: A ForeignKey referencing the project the user is collaborating in.
266266
role: A CharField meaning the role the user is fulfilling in the project.
267+
specialization: A CharField indicating the user's specialization within the project.
267268
datetime_created: A DateTimeField indicating date of creation.
268269
datetime_updated: A DateTimeField indicating date of update.
269270
"""
@@ -276,6 +277,14 @@ class Collaborator(models.Model):
276277
)
277278
project = models.ForeignKey(Project, models.CASCADE, verbose_name="Проект")
278279
role = models.CharField("Роль", max_length=1024, blank=True, null=True)
280+
specialization = models.CharField(
281+
"Специализация",
282+
max_length=100,
283+
blank=True,
284+
null=True,
285+
default=None,
286+
help_text="Направления работы участника в рамках проекта",
287+
)
279288

280289
datetime_created = models.DateTimeField(
281290
verbose_name="Дата создания", null=False, auto_now_add=True

0 commit comments

Comments
 (0)