feat(workspaces): add 'my_role' and 'owner' fields to WorkspaceSerializer

This commit is contained in:
2026-03-12 21:43:40 +08:00
parent 93b1699253
commit eee584038e

View File

@@ -11,14 +11,27 @@ class WorkspaceMemberInputSerializer(serializers.Serializer):
class WorkspaceSerializer(BaseModelSerializer): class WorkspaceSerializer(BaseModelSerializer):
members = WorkspaceMemberInputSerializer(many=True, write_only=True, required=False) members = WorkspaceMemberInputSerializer(many=True, write_only=True, required=False)
my_role = serializers.SerializerMethodField()
class Meta: class Meta:
model = Workspace model = Workspace
fields = BaseModelSerializer.Meta.fields + ( fields = BaseModelSerializer.Meta.fields + (
"name", "name",
"description", "description",
"owner",
"my_role",
"members", "members",
) )
read_only_fields = BaseModelSerializer.Meta.fields + (
"owner",
)
def get_my_role(self, obj):
membership = WorkspaceMembership.objects.filter(
workspace=obj,
user=self.context["request"].user,
).first()
return getattr(membership, "role", None)
def create(self, validated_data): def create(self, validated_data):
members_data = validated_data.pop('members', []) members_data = validated_data.pop('members', [])
@@ -31,7 +44,7 @@ class WorkspaceSerializer(BaseModelSerializer):
WorkspaceMembership( WorkspaceMembership(
workspace=workspace, workspace=workspace,
user_id=member['user_id'], user_id=member['user_id'],
role=member.get('role', 'member'), role=member['role'],
is_active=True is_active=True
) )
) )