55from rest_framework import serializers
66
77
8- class VoteSerializer (serializers .ModelSerializer ):
8+ class VoteSerializer (serializers .HyperlinkedModelSerializer ):
99 """
1010 Vote serializer
1111 """
12- proposal = serializers .CharField (
13- source = 'proposal.fingerprint'
14- )
15- representative = serializers .CharField (
16- source = 'representative.fingerprint' ,
17- allow_null = True
18- )
19-
2012 class Meta :
2113 model = models .Vote
2214 fields = (
@@ -27,44 +19,13 @@ class Meta:
2719 'position'
2820 )
2921
30- def to_internal_value (self , data ):
31- data = super (VoteSerializer , self ).to_internal_value (data )
32- data ['proposal' ] = models .Proposal .objects .get (
33- fingerprint = data ['proposal' ]['fingerprint' ]
34- )
35- if data ['representative' ]['fingerprint' ]:
36- data ['representative' ] = Representative .objects .get (
37- fingerprint = data ['representative' ]['fingerprint' ]
38- )
39- else :
40- data ['representative' ] = None
41-
42- return data
43-
44-
45- class ProposalSerializer (serializers .ModelSerializer ):
46- dossier = serializers .CharField (
47- source = 'dossier.fingerprint'
48- )
49-
50- dossier_title = serializers .CharField (
51- source = 'dossier.title' ,
52- read_only = True
53- )
54-
55- dossier_reference = serializers .CharField (
56- source = 'dossier.reference' ,
57- read_only = True
58- )
5922
23+ class ProposalSerializer (serializers .HyperlinkedModelSerializer ):
6024 class Meta :
6125 model = models .Proposal
6226 fields = (
6327 'id' ,
64- 'fingerprint' ,
6528 'dossier' ,
66- 'dossier_title' ,
67- 'dossier_reference' ,
6829 'title' ,
6930 'description' ,
7031 'reference' ,
@@ -76,58 +37,19 @@ class Meta:
7637 'url' ,
7738 )
7839
79- def to_internal_value (self , data ):
80- validated_data = super (ProposalSerializer , self ).to_internal_value (
81- data )
82- validated_data ['dossier' ] = models .Dossier .objects .get (
83- fingerprint = validated_data ['dossier' ]['fingerprint' ]
84- )
85- validated_data ['votes' ] = data ['votes' ]
86- return validated_data
87-
88- def _create_votes (self , votes_data , proposal ):
89- for vote in votes_data :
90- serializer = VoteSerializer (data = vote )
91- if serializer .is_valid ():
92- serializer .save ()
93- else :
94- raise Exception (serializer .errors )
95-
96- def create (self , validated_data ):
97- votes_data = validated_data .pop ('votes' )
98- proposal = models .Proposal .objects .create (
99- ** validated_data
100- )
101- self ._create_votes (votes_data , proposal )
102- return proposal
103-
104- def update (self , instance , validated_data ):
105- validated_data .pop ('votes' )
106- for attr , value in validated_data .iteritems ():
107- setattr (instance , attr , value )
108- instance .save ()
109- return instance
110-
11140
11241class ProposalDetailSerializer (ProposalSerializer ):
11342 """ Proposal serializer that includes votes """
114- votes = VoteSerializer (many = True )
11543
116- class Meta (ProposalSerializer .Meta ):
117- fields = ProposalSerializer .Meta .fields + (
118- 'votes' ,
119- )
12044
121-
122- class DossierSerializer (serializers .ModelSerializer ):
45+ class DossierSerializer (serializers .HyperlinkedModelSerializer ):
12346 """ Base dossier serializer """
12447 proposals = ProposalSerializer (many = True )
12548
12649 class Meta :
12750 model = models .Dossier
12851 fields = (
12952 'id' ,
130- 'fingerprint' ,
13153 'title' ,
13254 'reference' ,
13355 'text' ,
@@ -142,8 +64,3 @@ class DossierDetailSerializer(DossierSerializer):
14264 Dossier serializer that includes proposals and votes.
14365 """
14466 proposals = ProposalDetailSerializer (many = True )
145-
146- class Meta (DossierSerializer .Meta ):
147- fields = DossierSerializer .Meta .fields + (
148- 'proposals' ,
149- )
0 commit comments