如何使用Django REST Framework返回Model对象的自定义列表?

时间:2014-02-28 04:06:01

标签: python django rest

我正在构建一个Django应用程序,它公开了一个REST API,用户可以通过它查询我的应用程序的模型。我按照说明here

我的模型看起来像这样:

class MyObject(models.Model):
    name = models.TextField()

我的路线在myApp的url.py中显示如下:

from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'myObjects/(?P<id>\d+)/?$', views.MyObjectsViewSet)
url(r'^api/', include(router.urls)),

我的Serializer看起来像这样:

class MyObjectSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = MyObject
    fields = ('id', 'name',)

我的视图集如下所示:

class MyObjectsViewSet(viewsets.ViewSet):

    def retrieve(self,request,pk=None):
        queryset = MyObjects.objects.get(pk=pk).customMyObjectList()

        if not queryset:
            return Response(status=status.HTTP_400_BAD_REQUEST)
        else:
            serializer = MyObjectSerializer(queryset)
            return Response(serializer.data,status=status.HTTP_200_OK)

当我点击/ api / myObjects / 60 /时出现以下错误:

`base_name` argument not specified, and could not automatically determine the name from the viewset, as it does not have a `.model` or `.queryset` attribute.

This说我的路线上需要一个base_name参数。但是从文档来看,我不清楚base_name参数的值应该是什么。有人可以告诉我使用base_name的路径应该是什么样的吗?

1 个答案:

答案 0 :(得分:0)

您的viewset缺少.queryset.model媒体资源。 DefaultRouter()内省其中一个属性以确定网址路径。

您可以选择在创建base_name时定义DefaultRouter()

router = routers.DefaultRouter()
router.register('myObjects', views.MyObjectsViewSet, 'base-name-here')