Django REST framework のチュートリアルやってみた④

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
}

コメント

タイトルとURLをコピーしました