Hinzufügen der Namespace-URL zu einem Django-Rest-Framework-Router-Viewset

9

Ich möchte einen URL-Namespace zu meinem AIP-Router hinzufügen, aber wenn ich das tue, sucht der Router immer noch nach URLs ohne Namespace:

%Vor%

Die browsable API sucht nach URL-Namen wie 'user-list' und 'user-detail' still statt 'api:user-list' , was ich gerne geschehen würde.

Ich gehe davon aus, dass es eine einfache Lösung dafür gibt (das scheint eine ziemlich normale Sache zu sein), aber ich finde keine Lösung in den django-rest-Framework-Dokumenten. Wenn ich etwas aus den Dokumenten verpasse, bitte teilen Sie einen Link oder wenn ich mich dem Unrecht annähere (zB "Warum würdest du das tun, es ist eine schlechte Übung" oder was auch immer), bitte erkläre warum oder was der korrekte Weg zur Verwaltung von APIs wäre Sein. Danke!

    
Will Farley 26.10.2013, 22:02
quelle

2 Antworten

4

Es gibt derzeit eine Pull-Anfrage, die derzeit geöffnet ist . Bitte zögern Sie nicht, an der Diskussion teilzunehmen.

    
Carlton Gibson 28.10.2013, 08:11
quelle
0

Dies ist eine sehr alte Frage und die derzeit akzeptierte Antwort von Carlton Gibson ist nur ein Link zu einer Pull-Anfrage auf GitHub.

Wenn Sie das Web nach Django REST Framework-Routern mit Namespace durchsuchen, steht es an erster Stelle in den Ergebnissen. Es scheint die einzige Frage bei SO zu diesem Thema zu sein.
Da es keine konkrete Antwort mit Codebeispiel gibt, möchte ich hier meine Lösung hinzufügen.

Nehmen wir die EventViewSet aus der Antwort des OP. Für diesen Viewset sollte eine Modellklasse Event und ein Modell-Serializer EventSerializer vorhanden sein.
Das EventSerializer könnte so aussehen:

%Vor%

Dies ist ein Beispiel für HyperlinkedModelSerializer , das url field enthält.

Beliebige Hyperlink-Felder wie HyperlinkedIdentityField oder HyperlinkedRelatedField , die view_name als Argument annehmen, sollten den korrekten View-Namen mit dem Namespace entweder in der Deklaration oder über extra_kwargs übergeben werden.
Für eine angenommene CommentSerializer (entsprechend der CommentViewSet ) könnte es wie folgt aussehen:

%Vor%     
cezar 26.01.2018 14:24
quelle