2013-08-12 5 views
7

में django-rest कस्टम यूआरएल मुझे django-rest-framework में ModelViewSet में एक कस्टम यूआरएल जोड़ने में कोई समस्या है। यहाँ मेरी मुख्य urls.py का एक उदाहरणएक मॉडल व्यूसेट

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

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

मेरे modelviewset तरह

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= 

उत्तर

10

कुछ का उपयोग एक अलग दृश्य के रूप में सूची विधि बाहर खींच:

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

फिर, जैसा कि आप आमतौर पर करते अपनी तिथि के आधार पर देखने यूआरएल को यह नक्शा वर्ष, माह के लिए मानकों की स्थापना और दिन।

get_queryset में आप यह जांच सकते हैं कि इन kwargs सेट हैं या नहीं, और यदि ऐसा है, तो क्वेरीसेट फ़िल्टर करें।

+0

इस उत्तर ने मुझे एक टन मदद की! मुझे पता है कि यह पोस्ट करने के बाद से कुछ समय हो गया है, लेकिन क्या आपको कोई विचार है कि राउटर के साथ इन अलग-अलग बाध्य (क्या सही शब्द?) विचार पंजीकृत करना संभव है, ताकि वे ब्राउज़ करने योग्य एपीआई में देख सकें? – dkhaupt

+0

@dhhaupt आप यहां के अनुसार रूटिंग के लिए अतिरिक्त कार्रवाइयां चिह्नित कर सकते हैं: http://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing - मुझे यकीन नहीं है जो आपको वही देता है जो आपको चाहिए। आखिरकार आपको ब्राउज़ करने योग्य एपीआई के लिए टेम्पलेट को ओवरराइड करने की आवश्यकता हो सकती है और आपको जो भी लिंक चाहिए उसे जोड़ना पड़ सकता है। (दृश्य स्वयं को किसी अन्य के रूप में प्रस्तुत किया जा सकता है।) –

संबंधित मुद्दे