2014-09-18 2 views
5

세부 요청시1 모델 용 django-rest-framework 다중 직렬 변환기?

{field1, field2, field3}을 제공한다고 가정합니다.
{field1, field2} (목록 요청시)
{field1} 다른 좀 더 간단한 목록 요청.

get_serializer_class을 사용하여 예와 보았을 때 세부 사항 대 목록 시나리오를 처리 할 수있는 self.action을 보았습니다. (https://stackoverflow.com/a/22755648/433570)

두 개의 뷰 세트와 두 개의 URL 끝점을 정의해야합니까?
아니면 더 나은 방법이 있습니까?

나는 이것이 tastypie에도 적용될 수 있다고 생각한다. (두 가지 리소스?)

+0

가능한 중복 : 동적의 일부를 반환 fields] (http://stackoverflow.com/questions/23643204/django-rest-framework-dynamically-return-subset-of-fields) – Louis

답변

2

직접 테스트하지는 않았지만 필요한 메서드를 재정의 할 수 있다고 생각합니다.

class UserViewSet(viewsets.ViewSet): 
""" 
Example empty viewset demonstrating the standard 
actions that will be handled by a router class. 

If you're using format suffixes, make sure to also include 
the `format=None` keyword argument for each action. 
""" 

def list(self, request): 
    pass 

def create(self, request): 
    pass 

def retrieve(self, request, pk=None): 
    pass 

def update(self, request, pk=None): 
    pass 

def partial_update(self, request, pk=None): 
    pass 

def destroy(self, request, pk=None): 
    pass 

또는 사용자 정의 방법을 필요로하는 경우 :

the documentation (라우팅을위한 추가 조치를 표시)에 따르면, 당신은 할 수

from django.contrib.auth.models import User 
from rest_framework import status 
from rest_framework import viewsets 
from rest_framework.decorators import detail_route, list_route 
from rest_framework.response import Response 
from myapp.serializers import UserSerializer, PasswordSerializer 

class UserViewSet(viewsets.ModelViewSet): 
""" 
A viewset that provides the standard actions 
""" 
queryset = User.objects.all() 
serializer_class = UserSerializer 

@detail_route(methods=['post']) 
def set_password(self, request, pk=None): 
    user = self.get_object() 
    serializer = PasswordSerializer(data=request.DATA) 
    if serializer.is_valid(): 
     user.set_password(serializer.data['password']) 
     user.save() 
     return Response({'status': 'password set'}) 
    else: 
     return Response(serializer.errors, 
         status=status.HTTP_400_BAD_REQUEST) 

@list_route() 
def recent_users(self, request): 
    recent_users = User.objects.all().order('-last_login') 
    page = self.paginate_queryset(recent_users) 
    serializer = self.get_pagination_serializer(page) 
    return Response(serializer.data) 
[장고 나머지 프레임 워크의
+1

@ list_route로 코드 http로 여러 개의 목록 끝점을 추가 할 수 있습니다. : //stackoverflow.com/questions/22616973/django-rest-framewo rk-use-different-serializers-same-modelviewview를 사용하면 원하는 결과를 얻을 수 있습니다. – eugene

+0

들여 쓰기를 수정하십시오. 파이썬입니다 !!!. – ofnowhere

관련 문제