2013-06-20 11 views
8

Próbuję wyjść poza schematy początkowych płaskich adresów URL Django REST Frameworks. Na przykład, jeśli mam typy obiektów parentobject i childobject, gdzie parentobject HAS childobject (s childobject (s childobject), out the box REST jest następujący.Zagnieżdżone wzorce adresów URL w strukturze REST Django

^ ^api/^^parentobject/$ [name='parentobject-list'] 
^ ^api/^^parentobject/\.(?P<format>[a-z]+)$ [name='parentobject-list'] 
^ ^api/^^parentobject/(?P<pk>[^/]+)/$ [name='parentobject-detail'] 
^ ^api/^^parentobject/(?P<pk>[^/]+)/\.(?P<format>[a-z]+)$ [name='parentobject-detail'] 
^ ^api/^^childobject/$ [name='childobject-list'] 
^ ^api/^^childobject/\.(?P<format>[a-z]+)$ [name='childobject-list'] 
^ ^api/^^childobject/(?P<pk>[^/]+)/$ [name='childobject-detail'] 
^ ^api/^^childobject/(?P<pk>[^/]+)/\.(?P<format>[a-z]+)$ [name='childobject-detail'] 

W odpowiedziach nadrzędnego obiektu docelowego pojawią się odniesienia do identyfikatora obiektu potomnego.

GET /api/parentobject/1/ 

(results in) 
{ 
    "childobject": [123, 456, 789] 
} 

Jeśli chcesz szczegóły dotyczące childobject (lub wszystkie childobjects w db) można odwołać childobject API.

/api/childobject/ 
/api/childobject/123/ 

Na tej samej stronie nadal? :)

Co chcę zrobić, to stworzyć ogólny/rozszerzalny sposób odnoszenia się do relacji child m2m poprzez api typu parentobject bez konieczności ciągnięcia identyfikatorów, a następnie zażądać api childobject.

/api/parentobject/1/childobject/ 

[ 
    { 
     "childobject_prop": 1 
     ...etc 
    } 
] 

więc powyższe byłoby childobject (s) filtrowane na podstawie odniesienia parentobject w M2M przez tabelą zarządzanych przez Django.

Pomysł polegał również na tym, że byłby to ogólny sposób na tyle, na ile mógłbym zdefiniować nowy poprzez relację i mieć tę zdolność przy minimalnym nakładzie pracy. na przykład wzorce adresów URL będą automatycznie itp.

Dodatkowo, wszelkie relacje malejące będą obsługiwane w ten sam sposób. Taki, że "someotherchildobject" poniżej zwróci listę niektórych innych obiektów (ów), które są odwzorowane na childobject "123", które są odwzorowane na parentobject "1".

/api/parentobject/1/childobject/123/someotherchildobject/ 

Jeśli to nie jest wystarczająco jasne, daj mi znać. Mój dotychczasowy sukces był ograniczony. Nie chcę modyfikować Django REST, aby to osiągnąć, a jednocześnie nie chcę kontemplować wzorców adresów URL "ręcznie", dodając konkretne, które mnie interesują do urlpatterns.

Dodatkowo, jako bonus, chcę, aby to dotyczyło CUSTOM through = tables w Django; i mapuj dowolne dodatkowe pola w tabeli przelotowej na pola w zwróconych danych similar to this.

Dzięki!

Odpowiedz

Powiązane problemy