HyperlinkedRelatedFieldを使ってみる
APIをさらに便利にしていきます。serializers.pyを以下のように変更します。
class BlogSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Blog
fields = ['url', 'id', 'title', 'content', 'owner'] # url追加
class UserSerializer(serializers.ModelSerializer):
blog = serializers.HyperlinkedRelatedField(many=True, view_name='blog-detail', read_only=True) # 変更
class Meta:
model = User
fields = ['url', 'id', 'username', 'blog'] # url追加
このように変更する事で、今まではuser/にアクセスしたときのblogは記事のidで取得されていたのが、それぞれの記事へのurlに変更されました。
さらにurlの追加でそれぞれのブログ記事の詳細ページやそれぞれのユーザの詳細ページに飛ばす事が可能になりました。
ただこのままでは飛ばす事ができないので blog/urls.py を少し変更します。
blog/urls.py
from django.urls import path, include
from rest_framework.urlpatterns import format_suffix_patterns
from .views import BlogList, BlogDetail, UserList, UserDetail
urlpatterns = [
path('', api_root),
path('blog/', BlogList.as_view()),
path('blog/<int:pk>/', BlogDetail.as_view(), name='blog-detail'), # name追加
path('users/', UserList.as_view()),
path('users/<int:pk>/', UserDetail.as_view(), name='user-detail'), # name追加
path('api-auth/', include('rest_framework.urls')),
]
urlpatterns = format_suffix_patterns(urlpatterns)
このnameを追加する事で、それぞれの詳細ページへの誘導が可能になります。
ページネーション
ページネーション機能を追加します。Django REST framework ではsettings.pyに少し記述するだけでページネーションを実装する事ができます。settings.pyに追加してください。なお今回は5記事ずつ表示という設定にしましたが、10とか20にも簡単に変更できます。
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 5
}
コメント