2013-08-12 16 views
7

Mam problem z dodawaniem niestandardowego adresu URL do obiektu ModelViewSet w strukturze django-rest. Oto przykład z mojego głównego urls.pyNiestandardowy adres URL django-rest w ModelViewSet

router = routers.DefaultRouter() 
router.register(r'post', PostViewSet) 

urlpatterns = patterns('', 
    url(r'^api/', include(router.urls)), 
) 

Moja modelviewset wygląda

class PostViewSet(viewsets.ModelViewSet): 
    """ 
    API endpoint that allows users to be viewed or edited. 
    """ 
    queryset = Post.objects.all() 
    serializer_class = PostSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly,) 
    search_fields = ('created') 

    def pre_save(self, obj): 
     obj.user = self.request.user 


    # 
    # based on the post type this will decide which serializer to use for the data 
    def get_serializer_class(self): 
     # 
     # default is the Text role serializer 
     return PostSerializer 

że działa świetnie na url jak

/api/post/ 

szukam dostać zestaw dzień lubię

/api/post/yyyy/mm/dd/ 

Czy powinienem wystarczy użyć czegoś podobnego

/api/post/?year=&month=&day= 

Odpowiedz

10

Pull metodę listy jako odrębnej widzenia:

post_list = PostViewSet.as_view({'get': 'list'}) 

mapować to data oparte odnośników URL, jak zwykle będzie, ustawiania parametrów na rok, miesiąc i dzień.

W get_queryset można sprawdzić, czy te kwargs są ustawione, a jeśli tak, przefiltruj zestaw zapytań.

+0

Ta odpowiedź pomogła mi tona! Wiem, że minęło trochę czasu, odkąd je opublikowałeś, ale czy masz jakiś pomysł, czy można zarejestrować te osobno powiązane (czy to właściwe słowo?) Widoki z routerem, aby mogły być widoczne w interfejsie API do przeglądania? – dkhaupt

+0

@dkhaupt Możesz zaznaczyć dodatkowe akcje dla routingu w następujący sposób: http://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing - Nie jestem pewien to daje ci to, czego potrzebujesz. W ostateczności może być konieczne zastąpienie szablonu interfejsu API do przeglądania i dodanie dowolnego łącza, którego potrzebujesz. (Sam widok może być renderowany jak każdy inny). –