2013-08-12 6 views
7

django-rest-frameworkのModelViewSetにカスタムURLを追加する際に問題が発生しました。ここでModelViewSetのdjango-restカスタムURL

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

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

私modelviewsetは、私は、設定された日に取得しているよ

/api/post/ 

のようなURLのために素晴らしい作品

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 

のように見える私の主なurls.pyの例ですlike

/api/post/yyyy/mm/dd/ 

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

は、その後、あなたが通常と同じように、あなたの日付ベースのルックアップURLにこれをマッピングし、年、月のパラメータを設定すると:ちょうど別のビューとしてリスト方式を引き出し

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

答えて

10

のようなものを使用日。

get_querysetでは、これらのkwargsが設定されているかどうかを確認し、そうであればクエリーセットをフィルタリングできます。

+0

この回答は私にトンを助けました!あなたがそれを投稿してからしばらく時間がかかっていることは分かっていますが、ルータにビューを個別に登録することが可能かどうかは分かりますか? – dkhaupt

+0

@dkhauptここではルーティングのための追加のアクションをマークすることができます:http://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing - わかりませんそれはあなたに必要なものを与えます。最終的には、ブラウズ可能なAPIのテンプレートをオーバーライドし、必要なリンクを追加する必要があります。 (ビュー自体は他のものと同様にレンダリングできます)。 –