US #2911: Mixin 'users', 'members' and 'memberships' in ProjectDetailSerializer

remotes/origin/enhancement/email-actions
David Barragán Merino 2015-06-23 17:14:07 +02:00 committed by Alejandro Alonso
parent b5a1f6f5bf
commit d70800d3e6
2 changed files with 23 additions and 20 deletions

View File

@ -2,11 +2,13 @@
## 1.9.0 ??? (unreleased) ## 1.9.0 ??? (unreleased)
### Features ### Features
- Add a "field type" property for custom fields: 'text' and 'multiline text' right now (thanks to [@artlepool](https://github.com/artlepool)) - Add a "field type" property for custom fields: 'text' and 'multiline text' right now (thanks to [@artlepool](https://github.com/artlepool))
- Allow multiple actions in the commit messages.
### Misc ### Misc
- Allow multiple actions in the commit messages. - API: Mixin fields 'users', 'members' and 'memberships' in ProjectDetailSerializer
- Lots of small and not so small bugfixes. - Lots of small and not so small bugfixes.

View File

@ -272,21 +272,6 @@ class MembershipAdminSerializer(MembershipSerializer):
exclude = ("token",) exclude = ("token",)
class ProjectMembershipSerializer(serializers.ModelSerializer):
role_name = serializers.CharField(source='role.name', required=False, i18n=True)
full_name = serializers.CharField(source='user.get_full_name', required=False)
username = serializers.CharField(source='user.username', required=False)
color = serializers.CharField(source='user.color', required=False)
is_active = serializers.BooleanField(source='user.is_active', required=False)
photo = serializers.SerializerMethodField("get_photo")
class Meta:
model = models.Membership
def get_photo(self, project):
return get_photo_or_gravatar_url(project.user)
class MemberBulkSerializer(RoleExistsValidator, serializers.Serializer): class MemberBulkSerializer(RoleExistsValidator, serializers.Serializer):
email = serializers.EmailField() email = serializers.EmailField()
role_id = serializers.IntegerField() role_id = serializers.IntegerField()
@ -298,6 +283,23 @@ class MembersBulkSerializer(ProjectExistsValidator, serializers.Serializer):
invitation_extra_text = serializers.CharField(required=False, max_length=255) invitation_extra_text = serializers.CharField(required=False, max_length=255)
class ProjectMemberSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(source="user.id", read_only=True)
username = serializers.CharField(source='user.username', read_only=True)
full_name = serializers.CharField(source='user.full_name', read_only=True)
full_name_display = serializers.CharField(source='user.get_full_name', read_only=True)
color = serializers.CharField(source='user.color', read_only=True)
photo = serializers.SerializerMethodField("get_photo")
is_active = serializers.BooleanField(source='user.is_active', read_only=True)
role_name = serializers.CharField(source='role.name', read_only=True, i18n=True)
class Meta:
model = models.Membership
def get_photo(self, membership):
return get_photo_or_gravatar_url(membership.user)
###################################################### ######################################################
## Projects ## Projects
###################################################### ######################################################
@ -365,15 +367,14 @@ class ProjectDetailSerializer(ProjectSerializer):
many=True, required=False) many=True, required=False)
roles = ProjectRoleSerializer(source="roles", many=True, read_only=True) roles = ProjectRoleSerializer(source="roles", many=True, read_only=True)
users = UserSerializer(source="members", many=True, read_only=True) members = serializers.SerializerMethodField(method_name="get_members")
memberships = serializers.SerializerMethodField(method_name="get_memberships")
def get_memberships(self, obj): def get_members(self, obj):
qs = obj.memberships.filter(user__isnull=False) qs = obj.memberships.filter(user__isnull=False)
qs = qs.extra(select={"complete_user_name":"concat(full_name, username)"}) qs = qs.extra(select={"complete_user_name":"concat(full_name, username)"})
qs = qs.order_by("complete_user_name") qs = qs.order_by("complete_user_name")
qs = qs.select_related("role", "user") qs = qs.select_related("role", "user")
serializer = ProjectMembershipSerializer(qs, many=True) serializer = ProjectMemberSerializer(qs, many=True)
return serializer.data return serializer.data