折腾:
【未解决】剧本编写系统中优化超级管理员的全部剧本统计页
期间,想要获得当前所有的用户组,包括每个用户组中的成员的详细信息,包括用户名和id
目前已通过:
/apps/user/views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class FunctionGroupViewSet(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, PutOnlyUpdateModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet): """ 功能组,有组长 """ queryset = FunctionGroup.objects. all () serializer_class = FunctionGroupSerializer permission_classes = (IsAuthenticated, IsUserFunctionAdmin) filter_backends = (OrderingFilter, SearchFilter) ordering_fields = ( 'created_at' , ) ordering = ( '-created_at' , ) search_fields = ( 'name' , 'description' ) |
apps/user/serializers.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class FunctionGroupSerializer(serializers.ModelSerializer): owner = serializers.CharField(source = 'owner.username' ) function = serializers.SerializerMethodField() class Meta: model = FunctionGroup # fields = ('id', 'owner', 'name', 'function', 'description', # 'created_at', 'updated_at') fields = ( 'id' , 'owner' , 'name' , 'function' , 'description' , 'members' , 'created_at' , 'updated_at' ) read_only_fields = ( 'id' , 'created_at' , 'updated_at' ) def get_function( self , obj): return obj.get_function_display() |
目前暂时可以获取:

1 | functionGroups= {count: 4, next: null , previous: null , results: Array(4)}count: 4next: nullprevious: nullresults: Array(4)0: {id: 6, owner: "xxx" , name: "xxx剧本组" , function : "script_function_group" , description: "xxx剧本组" , …}1: created_at: "2018-07-04 21:41:14" description: "maggie剧本组" function : "script_function_group" id: 5members: Array(3)0: "44c3de7f-a0e4-4a62-8f64-720044ad6d03" 1: "78c7b3c4-8a7c-4f1f-96ce-dc469fedad40" 2: "7dff71b1-e48f-4b94-ade3-c832742a8ed7" length: 3__proto__: Array(0)name: "maggie剧本组" owner: "Maggie" updated_at: "2018-07-25 16:24:05" __proto__: Object2: {id: 4, owner: "xxx" , name: "script_function_group" , function : "script_function_group" , description: "剧本功能组,请勿改动名称" , …}3: {id: 3, owner: "xxx" , name: "admin_function_group" , function : "admin_function_group" , description: "超级管理员功能组" , …}length: 4__proto__: Array(0)__proto__: Object |
即
每个functionGroup的member的id了,但是想要获取member的name(和其他信息)
试了试:
1 2 | # members = UserSerializer(source='members') members = UserSerializer() |
结果没用。
Django serialize model submodel
【总结】
最后通过添加:
1 | members = UserSerializer(many=True, read_only=True) |
相关完整代码是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class FunctionGroupSerializer(serializers.ModelSerializer): owner = serializers.CharField(source = 'owner.username' ) function = serializers.SerializerMethodField() members = UserSerializer(many = True , read_only = True ) class Meta: model = FunctionGroup fields = ( 'id' , 'owner' , 'name' , 'function' , 'description' , 'members' , 'created_at' , 'updated_at' ) read_only_fields = ( 'id' , 'created_at' , 'updated_at' ) def get_function( self , obj): return obj.get_function_display() |
结果:
就达到要的效果了:

转载请注明:在路上 » 【已解决】Django中序列化一个模型对象中的另外子对象的数组