From 3681dcd0b90436719b9f84c93de4d138f20c5f70 Mon Sep 17 00:00:00 2001 From: Yakser Date: Sat, 19 Nov 2022 15:24:21 +0300 Subject: [PATCH 1/2] Add key_skills to custom user --- projects/serializers.py | 12 +++++----- ...member_key_skills_customuser_key_skills.py | 22 +++++++++++++++++++ users/models.py | 16 +++----------- users/serializers.py | 10 +++++---- users/views.py | 2 +- 5 files changed, 39 insertions(+), 23 deletions(-) create mode 100644 users/migrations/0020_remove_member_key_skills_customuser_key_skills.py diff --git a/projects/serializers.py b/projects/serializers.py index 023e223e..c819417f 100644 --- a/projects/serializers.py +++ b/projects/serializers.py @@ -34,11 +34,12 @@ class CollaboratorSerializer(serializers.ModelSerializer): first_name = serializers.CharField(source="user.first_name") last_name = serializers.CharField(source="user.last_name") avatar = serializers.CharField(source="user.avatar") - member_key_skills = serializers.SerializerMethodField() + key_skills = serializers.CharField(source="user.key_skills") + # member_key_skills = serializers.SerializerMethodField() - @classmethod - def get_member_key_skills(cls, collaborator): - return collaborator.user.get_member_key_skills() + # @classmethod + # def get_member_key_skills(cls, collaborator): + # return collaborator.user.get_member_key_skills() class Meta: model = Collaborator @@ -47,7 +48,8 @@ class Meta: "first_name", "last_name", "role", - "member_key_skills", + "key_skills", + # "member_key_skills", "avatar", ] diff --git a/users/migrations/0020_remove_member_key_skills_customuser_key_skills.py b/users/migrations/0020_remove_member_key_skills_customuser_key_skills.py new file mode 100644 index 00000000..0059e499 --- /dev/null +++ b/users/migrations/0020_remove_member_key_skills_customuser_key_skills.py @@ -0,0 +1,22 @@ +# Generated by Django 4.1.3 on 2022-11-19 12:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("users", "0019_alter_userachievement_user"), + ] + + operations = [ + migrations.RemoveField( + model_name="member", + name="key_skills", + ), + migrations.AddField( + model_name="customuser", + name="key_skills", + field=models.CharField(blank=True, max_length=512), + ), + ] diff --git a/users/models.py b/users/models.py index b713cb10..483f5227 100644 --- a/users/models.py +++ b/users/models.py @@ -65,6 +65,7 @@ class CustomUser(AbstractUser): ) patronymic = models.CharField(max_length=255, null=True, blank=True) + key_skills = models.CharField(max_length=512, blank=True) avatar = models.URLField(null=True, blank=True) birthday = models.DateField(null=True, blank=True) about_me = models.TextField(null=True, blank=True) @@ -82,14 +83,8 @@ class CustomUser(AbstractUser): objects = CustomUserManager() - def get_member_key_skills(self) -> list[str]: - if self.user_type == CustomUser.MEMBER: - return [ - skill.strip() - for skill in self.member.key_skills.split(",") - if skill.strip() - ] - return [] + def get_key_skills(self) -> list[str]: + return [skill.strip() for skill in self.key_skills.split(",") if skill.strip()] def __str__(self): return f"User<{self.id}> - {self.first_name} {self.last_name}" @@ -157,7 +152,6 @@ class Member(models.Model): Attributes: user: ForeignKey instance of the CustomUser model. - key_skills: CharField instance indicating member key skills. useful_to_project: TextField instance indicates actions useful for the development and maintenance of the project. preferred_industries: ManyToManyField indicating user industries preferred for work. @@ -167,15 +161,11 @@ class Member(models.Model): CustomUser, on_delete=models.CASCADE, related_name="member" ) - key_skills = models.CharField(max_length=512, blank=True) useful_to_project = models.TextField(blank=True) preferred_industries = models.ManyToManyField( Industry, blank=True, related_name="members" ) - def get_key_skills(self) -> list[str]: - return [skill.strip() for skill in self.key_skills.split(",") if skill.strip()] - def __str__(self): return f"Member<{self.id}> - {self.user.first_name} {self.user.last_name}" diff --git a/users/serializers.py b/users/serializers.py index 80a2eac5..3ca35522 100644 --- a/users/serializers.py +++ b/users/serializers.py @@ -20,12 +20,9 @@ def to_internal_value(self, data): class MemberSerializer(serializers.ModelSerializer): - key_skills = KeySkillsField() - class Meta: model = Member fields = [ - "key_skills", "useful_to_project", ] @@ -63,6 +60,7 @@ class UserDetailSerializer(serializers.ModelSerializer): expert = ExpertSerializer(required=False) mentor = MentorSerializer(required=False) achievements = AchievementListSerializer(required=False, many=True) + key_skills = KeySkillsField(required=False) class Meta: model = CustomUser @@ -73,6 +71,7 @@ class Meta: "first_name", "last_name", "patronymic", + "key_skills", "birthday", "speciality", "about_me", @@ -87,6 +86,7 @@ class Meta: ] def update(self, instance, validated_data): + if instance.user_type == CustomUser.MEMBER: instance.member.__dict__.update( validated_data.get("member", model_to_dict(instance.member)) @@ -108,13 +108,13 @@ def update(self, instance, validated_data): ) instance.mentor.save() - # maybe it's better to write ALLOWED_UPDATABLE_FIELDS = ["first_name", "last_name", ...] IMMUTABLE_FIELDS = ("email", "user_type", "is_active", "password") USER_TYPE_FIELDS = ("member", "investor", "expert", "mentor") RELATED_FIELDS = ("achievements",) for attr, value in validated_data.items(): if attr in IMMUTABLE_FIELDS + USER_TYPE_FIELDS + RELATED_FIELDS: continue + print(attr, value) setattr(instance, attr, value) instance.save() @@ -124,6 +124,7 @@ def update(self, instance, validated_data): class UserListSerializer(serializers.ModelSerializer): member = MemberSerializer(required=False) + key_skills = KeySkillsField() def create(self, validated_data): user = CustomUser(**validated_data) @@ -141,6 +142,7 @@ class Meta: "first_name", "last_name", "patronymic", + "key_skills", "avatar", "speciality", "birthday", diff --git a/users/views.py b/users/views.py index 653f996e..c78dee5f 100644 --- a/users/views.py +++ b/users/views.py @@ -121,7 +121,7 @@ def put(self, request, pk): serializer = AchievementDetailSerializer(instance, data=i, partial=False) serializer.is_valid(raise_exception=True) serializer.save() - return Response(status=status.HTTP_200_OK) + return super().put(request, pk) class CurrentUser(GenericAPIView): From d05d2121bb567a2b8b766b96a6a724ac9455416d Mon Sep 17 00:00:00 2001 From: Yakser Date: Sat, 19 Nov 2022 15:41:29 +0300 Subject: [PATCH 2/2] Fixed user creation error --- .../0021_alter_customuser_key_skills.py | 18 ++++++++++++++++++ users/models.py | 2 +- users/serializers.py | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 users/migrations/0021_alter_customuser_key_skills.py diff --git a/users/migrations/0021_alter_customuser_key_skills.py b/users/migrations/0021_alter_customuser_key_skills.py new file mode 100644 index 00000000..8a29c659 --- /dev/null +++ b/users/migrations/0021_alter_customuser_key_skills.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.3 on 2022-11-19 12:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("users", "0020_remove_member_key_skills_customuser_key_skills"), + ] + + operations = [ + migrations.AlterField( + model_name="customuser", + name="key_skills", + field=models.CharField(blank=True, max_length=512, null=True), + ), + ] diff --git a/users/models.py b/users/models.py index 483f5227..1f2a6518 100644 --- a/users/models.py +++ b/users/models.py @@ -65,7 +65,7 @@ class CustomUser(AbstractUser): ) patronymic = models.CharField(max_length=255, null=True, blank=True) - key_skills = models.CharField(max_length=512, blank=True) + key_skills = models.CharField(max_length=512, null=True, blank=True) avatar = models.URLField(null=True, blank=True) birthday = models.DateField(null=True, blank=True) about_me = models.TextField(null=True, blank=True) diff --git a/users/serializers.py b/users/serializers.py index 3ca35522..c9fbd74e 100644 --- a/users/serializers.py +++ b/users/serializers.py @@ -124,7 +124,7 @@ def update(self, instance, validated_data): class UserListSerializer(serializers.ModelSerializer): member = MemberSerializer(required=False) - key_skills = KeySkillsField() + key_skills = KeySkillsField(required=False) def create(self, validated_data): user = CustomUser(**validated_data)