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 import models
44
55
66class BlogSerializer (serializers .ModelSerializer ):
@@ -12,11 +12,11 @@ def get_copyright(self, obj):
1212
1313 def get_root_meta (self , obj ):
1414 return {
15- 'api_docs' : '/docs/api/blogs'
15+ 'api_docs' : '/docs/api/blogs'
1616 }
1717
1818 class Meta :
19- model = Blog
19+ model = models . Blog
2020 fields = ('name' , )
2121 meta_fields = ('copyright' ,)
2222
@@ -38,18 +38,18 @@ def __init__(self, *args, **kwargs):
3838
3939 body_format = serializers .SerializerMethodField ()
4040 comments = relations .ResourceRelatedField (
41- source = 'comment_set' , many = True , read_only = True )
41+ source = 'comment_set' , many = True , read_only = True )
4242 suggested = relations .SerializerMethodResourceRelatedField (
43- source = 'get_suggested' , model = Entry , read_only = True )
43+ source = 'get_suggested' , model = models . Entry , read_only = True )
4444
4545 def get_suggested (self , obj ):
46- return Entry .objects .exclude (pk = obj .pk ).first ()
46+ return models . Entry .objects .exclude (pk = obj .pk ).first ()
4747
4848 def get_body_format (self , obj ):
4949 return 'text'
5050
5151 class Meta :
52- model = Entry
52+ model = models . Entry
5353 fields = ('blog' , 'headline' , 'body_text' , 'pub_date' , 'mod_date' ,
5454 'authors' , 'comments' , 'suggested' ,)
5555 meta_fields = ('body_format' ,)
@@ -58,7 +58,7 @@ class Meta:
5858class AuthorBioSerializer (serializers .ModelSerializer ):
5959
6060 class Meta :
61- model = AuthorBio
61+ model = models . AuthorBio
6262 fields = ('author' , 'body' ,)
6363
6464
@@ -68,13 +68,52 @@ class AuthorSerializer(serializers.ModelSerializer):
6868 }
6969
7070 class Meta :
71- model = Author
71+ model = models . Author
7272 fields = ('name' , 'email' , 'bio' )
7373
7474
7575class CommentSerializer (serializers .ModelSerializer ):
7676
7777 class Meta :
78- model = Comment
78+ model = models . Comment
7979 exclude = ('created_at' , 'modified_at' ,)
8080 # fields = ('entry', 'body', 'author',)
81+
82+
83+ class ArtProjectSerializer (serializers .ModelSerializer ):
84+ class Meta :
85+ model = models .ArtProject
86+ exclude = ('polymorphic_ctype' ,)
87+
88+
89+ class ResearchProjectSerializer (serializers .ModelSerializer ):
90+ class Meta :
91+ model = models .ResearchProject
92+ exclude = ('polymorphic_ctype' ,)
93+
94+
95+ class ProjectSerializer (serializers .ModelSerializer ):
96+
97+ class Meta :
98+ model = models .Project
99+ exclude = ('polymorphic_ctype' ,)
100+
101+ def to_representation (self , instance ):
102+ # Handle polymorphism
103+ if isinstance (instance , models .ArtProject ):
104+ return ArtProjectSerializer (
105+ instance , context = self .context ).to_representation (instance )
106+ elif isinstance (instance , models .ResearchProject ):
107+ return ResearchProjectSerializer (
108+ instance , context = self .context ).to_representation (instance )
109+ return super (ProjectSerializer , self ).to_representation (instance )
110+
111+
112+ class CompanySerializer (serializers .ModelSerializer ):
113+ included_serializers = {
114+ 'current_project' : ProjectSerializer ,
115+ 'future_projects' : ProjectSerializer ,
116+ }
117+
118+ class Meta :
119+ model = models .Company
0 commit comments