6
6
from rest_framework .generics import ListAPIView
7
7
from rest_framework .generics import RetrieveAPIView
8
8
from rest_framework .serializers import SerializerMethodField
9
+ from rest_framework .exceptions import ValidationError
9
10
10
11
from patchwork .api .base import BaseHyperlinkedModelSerializer
11
12
from patchwork .api .base import PatchworkPermission
14
15
from patchwork .api .embedded import PatchSerializer
15
16
from patchwork .api .embedded import PersonSerializer
16
17
from patchwork .api .embedded import ProjectSerializer
18
+ from patchwork .api .embedded import SeriesSerializer as RelatedSeriesSerializer
17
19
from patchwork .models import Series
18
20
19
21
@@ -24,6 +26,14 @@ class SeriesSerializer(BaseHyperlinkedModelSerializer):
24
26
mbox = SerializerMethodField ()
25
27
cover_letter = CoverSerializer (read_only = True )
26
28
patches = PatchSerializer (read_only = True , many = True )
29
+ related_series = RelatedSeriesSerializer (many = True )
30
+
31
+ def get_related_series (self , obj ):
32
+ urls = []
33
+ for related_series in obj .related_series .all ():
34
+ url = self .get_web_url (related_series )
35
+ urls .append (url )
36
+ return urls
27
37
28
38
def get_web_url (self , instance ):
29
39
request = self .context .get ('request' )
@@ -33,6 +43,14 @@ def get_mbox(self, instance):
33
43
request = self .context .get ('request' )
34
44
return request .build_absolute_uri (instance .get_mbox_url ())
35
45
46
+ def validate_related_series (self , related_series ):
47
+ for series in related_series :
48
+ if self .instance .project .id != series .project .id :
49
+ raise ValidationError (
50
+ 'Series must belong to the same project.'
51
+ )
52
+ return related_series
53
+
36
54
class Meta :
37
55
model = Series
38
56
fields = (
@@ -44,6 +62,7 @@ class Meta:
44
62
'date' ,
45
63
'submitter' ,
46
64
'version' ,
65
+ 'related_series' ,
47
66
'total' ,
48
67
'received_total' ,
49
68
'received_all' ,
0 commit comments