Просмотр исходного кода

Introduce NestedObjectPermissionSerializer

Jeremy Stretch 5 лет назад
Родитель
Сommit
987414ed7b

+ 26 - 6
netbox/users/api/nested_serializers.py

@@ -1,16 +1,17 @@
 from django.contrib.auth.models import Group, User
+from django.contrib.contenttypes.models import ContentType
+from rest_framework import serializers
 
-from utilities.api import WritableNestedSerializer
+from users.models import ObjectPermission
+from utilities.api import ContentTypeField, WritableNestedSerializer
 
-_all_ = [
+__all__ = [
+    'NestedGroupSerializer',
+    'NestedObjectPermissionSerializer',
     'NestedUserSerializer',
 ]
 
 
-#
-# Groups and users
-#
-
 class NestedGroupSerializer(WritableNestedSerializer):
 
     class Meta:
@@ -23,3 +24,22 @@ class NestedUserSerializer(WritableNestedSerializer):
     class Meta:
         model = User
         fields = ['id', 'username']
+
+
+class NestedObjectPermissionSerializer(WritableNestedSerializer):
+    object_types = ContentTypeField(
+        queryset=ContentType.objects.all(),
+        many=True
+    )
+    groups = serializers.SerializerMethodField(read_only=True)
+    users = serializers.SerializerMethodField(read_only=True)
+
+    class Meta:
+        model = ObjectPermission
+        fields = ['id', 'object_types', 'groups', 'users', 'actions']
+
+    def get_groups(self, obj):
+        return [g.name for g in obj.groups.all()]
+
+    def get_users(self, obj):
+        return [u.username for u in obj.users.all()]

+ 1 - 0
netbox/users/api/serializers.py

@@ -1,3 +1,4 @@
+from django.contrib.auth.models import Group, User
 from django.contrib.contenttypes.models import ContentType
 
 from users.models import ObjectPermission

+ 1 - 4
netbox/users/tests/test_api.py

@@ -18,10 +18,7 @@ class AppTest(APITestCase):
 
 class ObjectPermissionTest(APIViewTestCases.APIViewTestCase):
     model = ObjectPermission
-    brief_fields = []
-
-    # TODO: Add a nested serializer for ObjectPermission
-    test_list_objects_brief = None
+    brief_fields = ['actions', 'groups', 'id', 'object_types', 'users']
 
     @classmethod
     def setUpTestData(cls):