Django REST Frameworkに再挑戦 その8 Hyperlinked Identity Field for URL
概要
Django REST Frameworkに再挑戦 その8 Hyperlinked Identity Field for URL
参考サイト
www.codingforentrepreneurs.com
Hyperlinked Identity Field for URL
Serializer relations - Django REST framework
- まず、serializer.pyの、PostListSerializer classのコードを修正する。
from rest_framework.serializers import ModelSerializer, HyperlinkedIdentityField ... class PostListSerializer(ModelSerializer): url = HyperlinkedIdentityField( view_name='posts-api:detail',#urlのnameを入れる。nameがincludeの場合は、name:name というように、:でつなぐ。 lookup_field='slug',#これは、detailのページのurlに合わせる必要あり?? ) class Meta: model = Post fields = [ 'url',#ここは、上記で定義したHyperlinkedIdentityFieldにしたがって表示される。 'user', 'title', 'slug', 'content', 'publish', ] ...
http://127.0.0.1:8000/api/posts/にアクセスすると、urlの箇所にそれぞれのdetailページのurlが表示されたリストが出てくるはず!
同様にdeleteURLも設定できる。
class PostListSerializer(ModelSerializer): url = HyperlinkedIdentityField( view_name='posts-api:detail',#urlのnameを入れる。nameがincludeの場合は、name:name というように、:でつなぐ。 lookup_field='slug',#これは、detailのページのurlに合わせる必要あり?? ) delete_url = HyperlinkedIdentityField( view_name='posts-api:delete', lookup_field='slug', ) class Meta: model = Post fields = [ 'url',#ここは、上記で定義したHyperlinkedIdentityFieldにしたがって表示される。 'user', 'title', 'content', 'publish', 'delete_url', ]
- さらに、url をclassとは別に定義しておいてそれを使い回すこともできる。以下のような形で先にurlを定義しておくとスッキリかけるかも。
post_detail_url = HyperlinkedIdentityField( view_name='posts-api:detail', lookup_field='slug', ) class PostDetailSerializer(ModelSerializer): url = post_detail_url class Meta: model = Post fields = [ 'url', 'id', 'title', 'slug', 'content', 'publish', ] class PostListSerializer(ModelSerializer): url = post_detail_url delete_url = HyperlinkedIdentityField( view_name='posts-api:delete', lookup_field='slug', ) class Meta: model = Post fields = [ 'url',#ここは、上記で定義したHyperlinkedIdentityFieldにしたがって表示される。 'user', 'title', 'content', 'publish', 'delete_url', ]
これも便利やなぁ〜!