Merge pull request #363 from taigaio/us/2911/mixin_users_with_memberships_in_project_detail_serializer

US #2911: Mixin 'users', 'members' and 'memberships' in ProjectDetailSerializer
remotes/origin/enhancement/email-actions
Alejandro 2015-06-24 01:25:04 -07:00
commit 109d3e19f4
2 changed files with 23 additions and 20 deletions

View File

@ -2,11 +2,13 @@
## 1.9.0 ??? (unreleased)
### Features
- 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
- Allow multiple actions in the commit messages.
- API: Mixin fields 'users', 'members' and 'memberships' in ProjectDetailSerializer
- Lots of small and not so small bugfixes.

View File

@ -272,21 +272,6 @@ class MembershipAdminSerializer(MembershipSerializer):
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):
email = serializers.EmailField()
role_id = serializers.IntegerField()
@ -298,6 +283,23 @@ class MembersBulkSerializer(ProjectExistsValidator, serializers.Serializer):
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
######################################################
@ -365,15 +367,14 @@ class ProjectDetailSerializer(ProjectSerializer):
many=True, required=False)
roles = ProjectRoleSerializer(source="roles", many=True, read_only=True)
users = UserSerializer(source="members", many=True, read_only=True)
memberships = serializers.SerializerMethodField(method_name="get_memberships")
members = serializers.SerializerMethodField(method_name="get_members")
def get_memberships(self, obj):
def get_members(self, obj):
qs = obj.memberships.filter(user__isnull=False)
qs = qs.extra(select={"complete_user_name":"concat(full_name, username)"})
qs = qs.order_by("complete_user_name")
qs = qs.select_related("role", "user")
serializer = ProjectMembershipSerializer(qs, many=True)
serializer = ProjectMemberSerializer(qs, many=True)
return serializer.data