2014-02-28 48 views
1

我正在構建一個公開REST API的Django應用程序,用戶可以通過它來查詢我的應用程序的模型。我遵循here的說明。如何使用Django REST框架返回Model對象的自定義列表?

我的模型看起來是這樣的:

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)), 

我的串行看起來是這樣的:

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的路線應該是什麼樣子?

+0

的可能重複[?如何建立一個Django的REST的API返回的模式自定義列表(http://stackoverflow.com/questions/22108636/how-to-build-a-django-rest-api-that-returns-a-custom-list-of-models) – almalki

回答

0

您的viewset缺少.queryset.model財產。 DefaultRouter()內省了其中一個屬性來確定url路徑。

創建DefaultRouter()時,您可以選擇定義base_name

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

我可以在base_name中添加anyhting嗎?它的價值應該是什麼?我可以放一個隨機字符串嗎?我的問題的關鍵是這個base_name的意義是什麼,它有什麼作用?它是如何工作的? –

+0

我不能解釋它比你鏈接到的文檔更好。 –

+0

所以在這種情況下。 base_name的正確值是什麼? –

相關問題