Skip to content

Commit a388d61

Browse files
committed
Added HyperLinked fields to example
1 parent 0856f91 commit a388d61

File tree

3 files changed

+78
-3
lines changed

3 files changed

+78
-3
lines changed

example/serializers.py

+43-3
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,58 @@ def __init__(self, *args, **kwargs):
6767
}
6868

6969
body_format = serializers.SerializerMethodField()
70+
# single related from model
71+
blog_hyperlinked = relations.HyperLinkedRelatedField(
72+
related_link_view_name='entry-blog',
73+
related_link_url_kwarg='entry_pk',
74+
self_link_view_name='entry-relationships',
75+
read_only=True,
76+
source='blog'
77+
)
7078
# many related from model
7179
comments = relations.ResourceRelatedField(
7280
many=True, read_only=True)
81+
# many related hyperlinked from model
82+
comments_hyperlinked = relations.HyperLinkedRelatedField(
83+
related_link_view_name='entry-comments',
84+
related_link_url_kwarg='entry_pk',
85+
self_link_view_name='entry-relationships',
86+
many=True,
87+
read_only=True,
88+
source='comments'
89+
)
7390
# many related from serializer
7491
suggested = relations.SerializerMethodResourceRelatedField(
75-
source='get_suggested', model=Entry, many=True, read_only=True,
7692
related_link_view_name='entry-suggested',
7793
related_link_url_kwarg='entry_pk',
7894
self_link_view_name='entry-relationships',
95+
source='get_suggested',
96+
model=Entry,
97+
many=True,
98+
read_only=True
99+
)
100+
# many related hyperlinked from serializer
101+
suggested_hyperlinked = relations.SerializerMethodHyperLinkedRelatedField(
102+
related_link_view_name='entry-suggested',
103+
related_link_url_kwarg='entry_pk',
104+
self_link_view_name='entry-relationships',
105+
source='get_suggested',
106+
model=Entry,
107+
many=True,
108+
read_only=True
79109
)
80110
# single related from serializer
81111
featured = relations.SerializerMethodResourceRelatedField(
82112
source='get_featured', model=Entry, read_only=True)
113+
# single related hyperlinked from serializer
114+
featured_hyperlinked = relations.SerializerMethodHyperLinkedRelatedField(
115+
related_link_view_name='entry-featured',
116+
related_link_url_kwarg='entry_pk',
117+
self_link_view_name='entry-relationships',
118+
source='get_featured',
119+
model=Entry,
120+
read_only=True
121+
)
83122
tags = TaggedItemSerializer(many=True, read_only=True)
84123

85124
def get_suggested(self, obj):
@@ -93,8 +132,9 @@ def get_body_format(self, obj):
93132

94133
class Meta:
95134
model = Entry
96-
fields = ('blog', 'headline', 'body_text', 'pub_date', 'mod_date',
97-
'authors', 'comments', 'featured', 'suggested', 'tags')
135+
fields = ('blog', 'blog_hyperlinked', 'headline', 'body_text', 'pub_date', 'mod_date',
136+
'authors', 'comments', 'comments_hyperlinked', 'featured', 'suggested',
137+
'suggested_hyperlinked', 'tags', 'featured_hyperlinked')
98138
read_only_fields = ('tags',)
99139
meta_fields = ('body_format',)
100140

example/urls.py

+13
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,19 @@
3232
EntryViewSet.as_view({'get': 'list'}),
3333
name='entry-suggested'
3434
),
35+
url(r'entries/(?P<entry_pk>[^/.]+)/blog',
36+
BlogViewSet.as_view({'get': 'retrieve'}),
37+
name='entry-blog'),
38+
url(r'entries/(?P<entry_pk>[^/.]+)/comments',
39+
CommentViewSet.as_view({'get': 'list'}),
40+
name='entry-comments'),
41+
url(r'entries/(?P<entry_pk>[^/.]+)/authors',
42+
AuthorViewSet.as_view({'get': 'list'}),
43+
name='entry-authors'),
44+
url(r'entries/(?P<entry_pk>[^/.]+)/featured',
45+
EntryViewSet.as_view({'get': 'retrieve'}),
46+
name='entry-featured'),
47+
3548
url(r'^entries/(?P<pk>[^/.]+)/relationships/(?P<related_field>\w+)',
3649
EntryRelationshipView.as_view(),
3750
name='entry-relationships'),

example/views.py

+22
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ class BlogViewSet(ModelViewSet):
2626
queryset = Blog.objects.all()
2727
serializer_class = BlogSerializer
2828

29+
def get_object(self):
30+
entry_pk = self.kwargs.get('entry_pk', None)
31+
if entry_pk is not None:
32+
return Entry.objects.get(id=entry_pk).blog
33+
34+
return super(BlogViewSet, self).get_object()
35+
2936

3037
class JsonApiViewSet(ModelViewSet):
3138
"""
@@ -68,6 +75,14 @@ class EntryViewSet(ModelViewSet):
6875
def get_serializer_class(self):
6976
return EntrySerializer
7077

78+
def get_object(self):
79+
# Handle featured
80+
entry_pk = self.kwargs.get('entry_pk', None)
81+
if entry_pk is not None:
82+
return Entry.objects.first()
83+
84+
return super(EntryViewSet, self).get_object()
85+
7186

7287
class NoPagination(PageNumberPagination):
7388
page_size = None
@@ -90,6 +105,13 @@ class CommentViewSet(ModelViewSet):
90105
'author': ['author__bio', 'author__entries'],
91106
}
92107

108+
def get_queryset(self, *args, **kwargs):
109+
entry_pk = self.kwargs.get('entry_pk', None)
110+
if entry_pk is not None:
111+
return self.queryset.filter(entry_id=entry_pk)
112+
113+
return super(CommentViewSet, self).get_queryset()
114+
93115

94116
class CompanyViewset(ModelViewSet):
95117
queryset = Company.objects.all()

0 commit comments

Comments
 (0)