@@ -38,83 +38,6 @@ class Meta:
38
38
read_only_fields = ["full_name" , "short_name" ]
39
39
40
40
41
- class DocumentAccessSerializer (serializers .ModelSerializer ):
42
- """Serialize document accesses."""
43
-
44
- document_id = serializers .PrimaryKeyRelatedField (
45
- read_only = True ,
46
- source = "document" ,
47
- )
48
- user_id = serializers .PrimaryKeyRelatedField (
49
- queryset = models .User .objects .all (),
50
- write_only = True ,
51
- source = "user" ,
52
- required = False ,
53
- allow_null = True ,
54
- )
55
- user = UserSerializer (read_only = True )
56
- abilities = serializers .SerializerMethodField (read_only = True )
57
- max_ancestors_role = serializers .SerializerMethodField (read_only = True )
58
-
59
- class Meta :
60
- model = models .DocumentAccess
61
- resource_field_name = "document"
62
- fields = [
63
- "id" ,
64
- "document_id" ,
65
- "user" ,
66
- "user_id" ,
67
- "team" ,
68
- "role" ,
69
- "abilities" ,
70
- "max_ancestors_role" ,
71
- ]
72
- read_only_fields = ["id" , "document_id" , "abilities" , "max_ancestors_role" ]
73
-
74
- def get_abilities (self , instance ) -> dict :
75
- """Return abilities of the logged-in user on the instance."""
76
- request = self .context .get ("request" )
77
- if request :
78
- return instance .get_abilities (request .user )
79
- return {}
80
-
81
- def get_max_ancestors_role (self , instance ):
82
- """Return max_ancestors_role if annotated; else None."""
83
- return getattr (instance , "max_ancestors_role" , None )
84
-
85
- def update (self , instance , validated_data ):
86
- """Make "user" field is readonly but only on update."""
87
- validated_data .pop ("user" , None )
88
- return super ().update (instance , validated_data )
89
-
90
-
91
- class DocumentAccessLightSerializer (DocumentAccessSerializer ):
92
- """Serialize document accesses with limited fields."""
93
-
94
- user = UserLightSerializer (read_only = True )
95
-
96
- class Meta :
97
- model = models .DocumentAccess
98
- resource_field_name = "document"
99
- fields = [
100
- "id" ,
101
- "document_id" ,
102
- "user" ,
103
- "team" ,
104
- "role" ,
105
- "abilities" ,
106
- "max_ancestors_role" ,
107
- ]
108
- read_only_fields = [
109
- "id" ,
110
- "document_id" ,
111
- "team" ,
112
- "role" ,
113
- "abilities" ,
114
- "max_ancestors_role" ,
115
- ]
116
-
117
-
118
41
class TemplateAccessSerializer (serializers .ModelSerializer ):
119
42
"""Serialize template accesses."""
120
43
@@ -223,6 +146,15 @@ def get_user_role(self, instance):
223
146
return instance .get_role (request .user ) if request else None
224
147
225
148
149
+ class DocumentLightSerializer (serializers .ModelSerializer ):
150
+ """Minial document serializer for nesting in document accesses."""
151
+
152
+ class Meta :
153
+ model = models .Document
154
+ fields = ["id" , "path" , "depth" ]
155
+ read_only_fields = ["id" , "path" , "depth" ]
156
+
157
+
226
158
class DocumentSerializer (ListDocumentSerializer ):
227
159
"""Serialize documents with all fields for display in detail views."""
228
160
@@ -357,6 +289,82 @@ def save(self, **kwargs):
357
289
return super ().save (** kwargs )
358
290
359
291
292
+ class DocumentAccessSerializer (serializers .ModelSerializer ):
293
+ """Serialize document accesses."""
294
+
295
+ document = DocumentLightSerializer (read_only = True )
296
+ user_id = serializers .PrimaryKeyRelatedField (
297
+ queryset = models .User .objects .all (),
298
+ write_only = True ,
299
+ source = "user" ,
300
+ required = False ,
301
+ allow_null = True ,
302
+ )
303
+ user = UserSerializer (read_only = True )
304
+ team = serializers .CharField (required = False , allow_blank = True )
305
+ abilities = serializers .SerializerMethodField (read_only = True )
306
+ max_ancestors_role = serializers .SerializerMethodField (read_only = True )
307
+
308
+ class Meta :
309
+ model = models .DocumentAccess
310
+ resource_field_name = "document"
311
+ fields = [
312
+ "id" ,
313
+ "document" ,
314
+ "user" ,
315
+ "user_id" ,
316
+ "team" ,
317
+ "role" ,
318
+ "abilities" ,
319
+ "max_ancestors_role" ,
320
+ ]
321
+ read_only_fields = ["id" , "document" , "abilities" , "max_ancestors_role" ]
322
+
323
+ def get_abilities (self , instance ) -> dict :
324
+ """Return abilities of the logged-in user on the instance."""
325
+ request = self .context .get ("request" )
326
+ if request :
327
+ return instance .get_abilities (request .user )
328
+ return {}
329
+
330
+ def get_max_ancestors_role (self , instance ):
331
+ """Return max_ancestors_role if annotated; else None."""
332
+ return getattr (instance , "max_ancestors_role" , None )
333
+
334
+ def update (self , instance , validated_data ):
335
+ """Make "user" field readonly but only on update."""
336
+ validated_data .pop ("team" , None )
337
+ validated_data .pop ("user" , None )
338
+ return super ().update (instance , validated_data )
339
+
340
+
341
+ class DocumentAccessLightSerializer (DocumentAccessSerializer ):
342
+ """Serialize document accesses with limited fields."""
343
+
344
+ user = UserLightSerializer (read_only = True )
345
+
346
+ class Meta :
347
+ model = models .DocumentAccess
348
+ resource_field_name = "document"
349
+ fields = [
350
+ "id" ,
351
+ "document" ,
352
+ "user" ,
353
+ "team" ,
354
+ "role" ,
355
+ "abilities" ,
356
+ "max_ancestors_role" ,
357
+ ]
358
+ read_only_fields = [
359
+ "id" ,
360
+ "document" ,
361
+ "team" ,
362
+ "role" ,
363
+ "abilities" ,
364
+ "max_ancestors_role" ,
365
+ ]
366
+
367
+
360
368
class ServerCreateDocumentSerializer (serializers .Serializer ):
361
369
"""
362
370
Serializer for creating a document from a server-to-server request.
0 commit comments