Skip to content

Commit 4c0f818

Browse files
committed
serializers: Add 'related_versions' field to series serializer
For two series to be linked togheter they must belong to the same project Closes getpatchwork#506 Signed-off-by: andrepapoti <[email protected]>
1 parent ad538d3 commit 4c0f818

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

patchwork/api/series.py

+19
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from rest_framework.generics import ListAPIView
77
from rest_framework.generics import RetrieveAPIView
88
from rest_framework.serializers import SerializerMethodField
9+
from rest_framework.exceptions import ValidationError
910

1011
from patchwork.api.base import BaseHyperlinkedModelSerializer
1112
from patchwork.api.base import PatchworkPermission
@@ -14,6 +15,7 @@
1415
from patchwork.api.embedded import PatchSerializer
1516
from patchwork.api.embedded import PersonSerializer
1617
from patchwork.api.embedded import ProjectSerializer
18+
from patchwork.api.embedded import SeriesSerializer as RelatedSeriesSerializer
1719
from patchwork.models import Series
1820

1921

@@ -24,6 +26,14 @@ class SeriesSerializer(BaseHyperlinkedModelSerializer):
2426
mbox = SerializerMethodField()
2527
cover_letter = CoverSerializer(read_only=True)
2628
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
2737

2838
def get_web_url(self, instance):
2939
request = self.context.get('request')
@@ -33,6 +43,14 @@ def get_mbox(self, instance):
3343
request = self.context.get('request')
3444
return request.build_absolute_uri(instance.get_mbox_url())
3545

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+
3654
class Meta:
3755
model = Series
3856
fields = (
@@ -44,6 +62,7 @@ class Meta:
4462
'date',
4563
'submitter',
4664
'version',
65+
'related_series',
4766
'total',
4867
'received_total',
4968
'received_all',

0 commit comments

Comments
 (0)