@@ -49,7 +49,73 @@ class Meta:
49
49
meta_fields = ('copyright' ,)
50
50
51
51
52
- class EntrySerializer (serializers .ModelSerializer ):
52
+
53
+ class AuthorTypeSerializer (serializers .ModelSerializer ):
54
+ class Meta :
55
+ model = AuthorType
56
+ fields = ('name' , )
57
+
58
+
59
+ class AuthorBioSerializer (serializers .ModelSerializer ):
60
+ class Meta :
61
+ model = AuthorBio
62
+ fields = ('author' , 'body' )
63
+
64
+
65
+ class AuthorSerializer (serializers .ModelSerializer ):
66
+ bio = relations .ResourceRelatedField (
67
+ related_link_view_name = 'author-related' ,
68
+ self_link_view_name = 'author-relationships' ,
69
+ queryset = AuthorBio .objects ,
70
+ )
71
+ entries = relations .ResourceRelatedField (
72
+ related_link_view_name = 'author-related' ,
73
+ self_link_view_name = 'author-relationships' ,
74
+ queryset = Entry .objects ,
75
+ many = True
76
+ )
77
+ first_entry = relations .SerializerMethodResourceRelatedField (
78
+ related_link_view_name = 'author-related' ,
79
+ self_link_view_name = 'author-relationships' ,
80
+ model = Entry ,
81
+ read_only = True ,
82
+ source = 'get_first_entry'
83
+ )
84
+ included_serializers = {
85
+ 'bio' : AuthorBioSerializer ,
86
+ 'type' : AuthorTypeSerializer
87
+ }
88
+ related_serializers = {
89
+ 'bio' : 'example.serializers.AuthorBioSerializer' ,
90
+ 'entries' : 'example.serializers.EntrySerializer' ,
91
+ 'first_entry' : 'example.serializers.EntrySerializer'
92
+ }
93
+
94
+ class Meta :
95
+ model = Author
96
+ fields = ('name' , 'email' , 'bio' , 'entries' , 'first_entry' , 'type' )
97
+
98
+ def get_first_entry (self , obj ):
99
+ return obj .entries .first ()
100
+
101
+
102
+ class WriterSerializer (serializers .ModelSerializer ):
103
+ included_serializers = {
104
+ 'bio' : AuthorBioSerializer
105
+ }
106
+
107
+ class Meta :
108
+ model = Author
109
+ fields = ('name' , 'email' , 'bio' )
110
+ resource_name = 'writers'
111
+
112
+ class IncludedEntrySerializer (serializers .IncludedResourcesMixin , serializers .Serializer ):
113
+ blogs = BlogSerializer (many = True , required = False )
114
+ authors = AuthorSerializer (many = True , required = False )
115
+
116
+
117
+ class EntrySerializer (serializers .IncludingResourcesMixin , serializers .ModelSerializer ):
118
+
53
119
def __init__ (self , * args , ** kwargs ):
54
120
super (EntrySerializer , self ).__init__ (* args , ** kwargs )
55
121
# to make testing more concise we'll only output the
@@ -65,6 +131,7 @@ def __init__(self, *args, **kwargs):
65
131
'suggested' : 'example.serializers.EntrySerializer' ,
66
132
'tags' : 'example.serializers.TaggedItemSerializer' ,
67
133
}
134
+ _included = IncludedEntrySerializer (write_only = True )
68
135
69
136
body_format = serializers .SerializerMethodField ()
70
137
# single related from model
@@ -134,74 +201,13 @@ class Meta:
134
201
model = Entry
135
202
fields = ('blog' , 'blog_hyperlinked' , 'headline' , 'body_text' , 'pub_date' , 'mod_date' ,
136
203
'authors' , 'comments' , 'comments_hyperlinked' , 'featured' , 'suggested' ,
137
- 'suggested_hyperlinked' , 'tags' , 'featured_hyperlinked' )
204
+ 'suggested_hyperlinked' , 'tags' , 'featured_hyperlinked' , '_included' )
138
205
read_only_fields = ('tags' ,)
139
206
meta_fields = ('body_format' ,)
140
207
141
208
class JSONAPIMeta :
142
209
included_resources = ['comments' ]
143
210
144
-
145
- class AuthorTypeSerializer (serializers .ModelSerializer ):
146
- class Meta :
147
- model = AuthorType
148
- fields = ('name' , )
149
-
150
-
151
- class AuthorBioSerializer (serializers .ModelSerializer ):
152
- class Meta :
153
- model = AuthorBio
154
- fields = ('author' , 'body' )
155
-
156
-
157
- class AuthorSerializer (serializers .ModelSerializer ):
158
- bio = relations .ResourceRelatedField (
159
- related_link_view_name = 'author-related' ,
160
- self_link_view_name = 'author-relationships' ,
161
- queryset = AuthorBio .objects ,
162
- )
163
- entries = relations .ResourceRelatedField (
164
- related_link_view_name = 'author-related' ,
165
- self_link_view_name = 'author-relationships' ,
166
- queryset = Entry .objects ,
167
- many = True
168
- )
169
- first_entry = relations .SerializerMethodResourceRelatedField (
170
- related_link_view_name = 'author-related' ,
171
- self_link_view_name = 'author-relationships' ,
172
- model = Entry ,
173
- read_only = True ,
174
- source = 'get_first_entry'
175
- )
176
- included_serializers = {
177
- 'bio' : AuthorBioSerializer ,
178
- 'type' : AuthorTypeSerializer
179
- }
180
- related_serializers = {
181
- 'bio' : 'example.serializers.AuthorBioSerializer' ,
182
- 'entries' : 'example.serializers.EntrySerializer' ,
183
- 'first_entry' : 'example.serializers.EntrySerializer'
184
- }
185
-
186
- class Meta :
187
- model = Author
188
- fields = ('name' , 'email' , 'bio' , 'entries' , 'first_entry' , 'type' )
189
-
190
- def get_first_entry (self , obj ):
191
- return obj .entries .first ()
192
-
193
-
194
- class WriterSerializer (serializers .ModelSerializer ):
195
- included_serializers = {
196
- 'bio' : AuthorBioSerializer
197
- }
198
-
199
- class Meta :
200
- model = Author
201
- fields = ('name' , 'email' , 'bio' )
202
- resource_name = 'writers'
203
-
204
-
205
211
class CommentSerializer (serializers .ModelSerializer ):
206
212
# testing remapping of related name
207
213
writer = relations .ResourceRelatedField (source = 'author' , read_only = True )
0 commit comments