在ModelViewSet中使用django-rest自定义URL

时间:2013-08-12 18:58:23

标签: django django-rest-framework

我在向django-rest-framework中的ModelViewSet添加自定义URL时遇到问题。这是我的主要urls.py

的一个例子
router = routers.DefaultRouter()
router.register(r'post', PostViewSet)

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

我的模型视图看起来像

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

对于像

这样的网址来说非常有用
 /api/post/

我希望得到像

这样的定日
/api/post/yyyy/mm/dd/

或者我应该使用像

这样的东西
/api/post/?year=&month=&day=

1 个答案:

答案 0 :(得分:11)

将列表方法拉出作为单独的视图:

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

然后像往常一样将此映射到基于日期的查找网址,设置年,月和日的参数。

get_queryset中,您可以检查是否设置了这些kwargs,如果是,则过滤查询集。