2016-12-05 9 views
0

Ich möchte Routen wie folgt umzusetzen:Django REST-Framework verschachtelt Routen ohne PK

/items - list of all items. 
/items/types - list of all item types 

Ich war bei DRF-nester-Router suchen, sondern verschachtelt Urls erwarten {pk} weitergegeben werden. Gibt es einen guten Weg, um zu erreichen, was ich will?

Antwort

1

Wenn Sie nicht pk benötigen, dann sollten Sie Ihre Route /types sein nicht /items/types

Sie können einen Blick auf diese Frage SO über REST verschachtelt Ressourcen nehmen müssen:

What are best practices for REST nested resources

+0

Jetzt ist es auf diese Weise implementiert. Aber ich denke, dass es logischer ist, Typen zu einer Unter-URL von Elementen zu machen, weil sie Typen von Elementen sind und sonst nichts. – mcferden

+1

Wenn es sich um Typen von Elementen (Unterressourcen von Elementen) handelt, müssen Sie 'pk' hinzufügen. Wenn ich gut verstehe, was Sie brauchen, ist '/ types' nicht'/items//types' – ettanany

0

Mit ID /items/1/types würde so etwas wie "alle Typen anzeigen, die zum Artikel mit der ID 1 gehören". Dagegen ist /items/types nicht wirklich sinnvoll, da Ressourcentypen nicht zu allen Artikelressourcen gehören können.

Sie könnten es jedoch implementieren, als benutzerdefinierte Aktion für Ihre ViewSet mit @list_route Dekorateur, z.

class MyViewSet(viewsets.ModelViewSet): 
    ... 
    @list_route() 
    def types(self, request): 
     return Response(some_way_to_list_types()) 
    ... 

Es ist wahrscheinlich nicht eine RESTful Weg obwohl.

Docs on custom ViewSet actions

Verwandte Themen