From 371aff32514a1aa3fc74729d05108100a7011f61 Mon Sep 17 00:00:00 2001 From: BaiJiangJie <32935519+BaiJiangJie@users.noreply.github.com> Date: Thu, 4 Jul 2019 16:44:46 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[Update]=20=E4=BC=98=E5=8C=96=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=BB=84=E5=88=97=E8=A1=A8=E7=94=A8=E6=88=B7=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98=20(#2882)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/users/api/group.py | 13 +++++++++++-- apps/users/serializers/v1.py | 13 +++++++++++++ apps/users/templates/users/user_group_list.html | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps/users/api/group.py b/apps/users/api/group.py index fc9a84928..e1abc4402 100644 --- a/apps/users/api/group.py +++ b/apps/users/api/group.py @@ -5,8 +5,11 @@ from rest_framework import generics from rest_framework_bulk import BulkModelViewSet from rest_framework.pagination import LimitOffsetPagination -from ..serializers import UserGroupSerializer, \ - UserGroupUpdateMemberSerializer +from ..serializers import ( + UserGroupSerializer, + UserGroupListSerializer, + UserGroupUpdateMemberSerializer, +) from ..models import UserGroup from common.permissions import IsOrgAdmin from common.mixins import IDInCacheFilterMixin @@ -23,6 +26,12 @@ class UserGroupViewSet(IDInCacheFilterMixin, BulkModelViewSet): permission_classes = (IsOrgAdmin,) pagination_class = LimitOffsetPagination + def get_serializer_class(self): + if self.action in ("list", 'retrieve') and \ + self.request.query_params.get("display"): + return UserGroupListSerializer + return self.serializer_class + class UserGroupUpdateUserApi(generics.RetrieveUpdateAPIView): queryset = UserGroup.objects.all() diff --git a/apps/users/serializers/v1.py b/apps/users/serializers/v1.py index 8836e9542..63fe52699 100644 --- a/apps/users/serializers/v1.py +++ b/apps/users/serializers/v1.py @@ -6,10 +6,19 @@ from rest_framework import serializers from common.utils import get_signer, validate_ssh_public_key from common.mixins import BulkSerializerMixin +from common.fields import StringManyToManyField from common.serializers import AdaptedBulkListSerializer from orgs.mixins import BulkOrgResourceModelSerializer from ..models import User, UserGroup + +__all__ = [ + 'UserSerializer', 'UserPKUpdateSerializer', 'UserUpdateGroupSerializer', + 'UserGroupSerializer', 'UserGroupListSerializer', + 'UserGroupUpdateMemberSerializer', 'ChangeUserPasswordSerializer' +] + + signer = get_signer() @@ -108,6 +117,10 @@ class UserGroupSerializer(BulkOrgResourceModelSerializer): } +class UserGroupListSerializer(UserGroupSerializer): + users = StringManyToManyField(many=True, read_only=True) + + class UserGroupUpdateMemberSerializer(serializers.ModelSerializer): users = serializers.PrimaryKeyRelatedField(many=True, queryset=User.objects.all()) diff --git a/apps/users/templates/users/user_group_list.html b/apps/users/templates/users/user_group_list.html index 48394b30d..c5b5d75bc 100644 --- a/apps/users/templates/users/user_group_list.html +++ b/apps/users/templates/users/user_group_list.html @@ -79,7 +79,7 @@ function initTable() { } }} ], - ajax_url: '{% url "api-users:user-group-list" %}', + ajax_url: '{% url "api-users:user-group-list" %}?display=1', columns: [{data: function(){return ""}}, {data: "name" }, {data: "users"}, {data: "comment"}, {data: "id" }], order: [], From b5962a098ae9c5b9c8b0014db84b9ab66120acd9 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Thu, 4 Jul 2019 17:09:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[Update]=20=E8=A7=A3=E5=86=B3select=5Ffor?= =?UTF-8?q?=5Fupdate=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/terminal/api/session.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/terminal/api/session.py b/apps/terminal/api/session.py index 6dd48f591..2a92c7bc9 100644 --- a/apps/terminal/api/session.py +++ b/apps/terminal/api/session.py @@ -38,12 +38,12 @@ class SessionViewSet(OrgBulkModelViewSet): ('date_start', ('date_from', 'date_to')) ] - def get_object(self): + def filter_queryset(self, queryset): + queryset = super().filter_queryset(queryset) # 解决guacamole更新session时并发导致幽灵会话的问题 - obj = super().get_object() - if self.request.method in ('PATCH', ): - obj = obj.select_for_update() - return obj + if self.request.method in ('PATCH',): + queryset = queryset.select_for_update() + return queryset @property def filter_backends(self):