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!