2013-08-12 8 views
7

Ich habe ein Problem beim Hinzufügen einer benutzerdefinierten URL zu einem ModelViewSet in Django-Rest-Framework. Hier ist ein Beispiel meiner Haupt urls.pydjango-rest benutzerdefinierte URL in einem ModelViewSet

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

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

Mein modelviewset sieht aus wie

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 

, die für eine url große Werke wie

/api/post/ 

Ich suche einen bestimmten Tag zu erhalten wie

/api/post/yyyy/mm/dd/ 

Oder sollte ich benutzen Sie einfach so etwas wie

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

Antwort

10

die Liste Methode als eine separate Ansicht herausziehen:

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

Dann auf Karte zu Ihrer datumsbasierten Lookup URL, wie Sie normalerweise tun würden, Einstellparameter für Jahr, Monat und Tag.

In get_queryset können Sie überprüfen, ob diese Kwargs festgelegt sind, und wenn ja, filtern Sie das Abfrage-Set.

+0

Diese Antwort hat mir eine Tonne geholfen! Ich weiß, dass es eine Weile her ist, seit du es gepostet hast, aber hast du eine Idee, wenn es möglich ist, diese separat gebundenen (das ist das richtige Wort?) Ansichten mit dem Router zu registrieren, damit sie in der durchsuchbaren API zu sehen sind? – dkhaupt

+0

@dkhaupt Sie können zusätzliche Aktionen für das Routing markieren, wie hier beschrieben: http://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing - ich bin mir nicht sicher das gibt dir, was du brauchst. Letztendlich müssen Sie möglicherweise die Vorlage für die durchsuchbare API überschreiben und den gewünschten Link hinzufügen. (Die Ansicht selbst kann wie jede andere gerendert werden.) –

Verwandte Themen