11from datetime import datetime
22from rest_framework_json_api import serializers , relations
3- from example .models import Blog , Entry , Author , AuthorBio , Comment
3+ from example .models import Blog , Entry , Author , AuthorBio , Comment , TaggedItem
4+
5+
6+ class TaggedItemSerializer (serializers .ModelSerializer ):
7+
8+ class Meta :
9+ model = TaggedItem
10+ fields = ('tag' , )
411
512
613class BlogSerializer (serializers .ModelSerializer ):
714
815 copyright = serializers .SerializerMethodField ()
16+ tags = TaggedItemSerializer (many = True , read_only = True )
17+
18+ include_serializers = {
19+ 'tags' : 'example.serializers.TaggedItemSerializer' ,
20+ }
921
1022 def get_copyright (self , resource ):
1123 return datetime .now ().year
@@ -17,7 +29,8 @@ def get_root_meta(self, resource, many):
1729
1830 class Meta :
1931 model = Blog
20- fields = ('name' , 'url' ,)
32+ fields = ('name' , 'url' , 'tags' )
33+ read_only_fields = ('tags' , )
2134 meta_fields = ('copyright' ,)
2235
2336
@@ -36,6 +49,7 @@ def __init__(self, *args, **kwargs):
3649 'comments' : 'example.serializers.CommentSerializer' ,
3750 'featured' : 'example.serializers.EntrySerializer' ,
3851 'suggested' : 'example.serializers.EntrySerializer' ,
52+ 'tags' : 'example.serializers.TaggedItemSerializer' ,
3953 }
4054
4155 body_format = serializers .SerializerMethodField ()
@@ -52,6 +66,7 @@ def __init__(self, *args, **kwargs):
5266 # single related from serializer
5367 featured = relations .SerializerMethodResourceRelatedField (
5468 source = 'get_featured' , model = Entry , read_only = True )
69+ tags = TaggedItemSerializer (many = True , read_only = True )
5570
5671 def get_suggested (self , obj ):
5772 return Entry .objects .exclude (pk = obj .pk )
@@ -65,7 +80,8 @@ def get_body_format(self, obj):
6580 class Meta :
6681 model = Entry
6782 fields = ('blog' , 'headline' , 'body_text' , 'pub_date' , 'mod_date' ,
68- 'authors' , 'comments' , 'featured' , 'suggested' ,)
83+ 'authors' , 'comments' , 'featured' , 'suggested' , 'tags' )
84+ read_only_fields = ('tags' , )
6985 meta_fields = ('body_format' ,)
7086
7187 class JSONAPIMeta :
0 commit comments