Routers 의 namespace 설정
Routers 를 include 에 사용할 때 namespace 를 지정할 일이 생긴다.그러면 serializer 에서 사용하고 있는 field 의 view_name 에도 namespace 를 추가 해 줘야 한다.
- '<namespace>:<url>'
- 예: api:user-detail
view_name 설정
view_name 을 설정해 주는 방법은 아래의 글들을 참고하자.- Serializer relations - Django REST framework : Serializer 에서 field 에 쓰일 Field 의 class 를 직접 지정(assign)해 줄 수 있다.
- Serializer relations - Django REST framework
- Serializers - Customizing field mappings : serializer 에 쓰이는 field 를 override 로 바꾸는 작업
Example
아래는 namespace 를 지정할 때에 대한 예시다.
# myapp2/serializers.py from django.contrib.auth.models import User, Group from rest_framework import serializers class UserSerializer(serializers.HyperlinkedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name = 'myapp2:user-detail') class Meta: model = User fields = ('url', 'username', 'email', 'groups') class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group fields = ('url', 'name') # myapp/urls.py from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^api/', include('myapp2.urls', namespace = 'myapp2')), url(r'^admin/', include(admin.site.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace = 'rest_framework')), ] # myapp2/urls.py from django.conf.urls import include, url from rest_framework import routers from .views import UserViewSet, GroupViewSet # Routers provide an easy way of automatically determining the URL conf. router = routers.DefaultRouter() router.register(r'users', UserViewSet) router.register(r'groups', GroupViewSet) urlpatterns = [ url(r'^', include(router.urls), name='router'), ]
댓글 없음:
댓글 쓰기