Problem (swap blocker)
The package exposes a fixed JSON API surface (api/urls.py:84-176) + an SPA catch-all (urls.py:55). Nothing introspects ModelAdmin.get_urls() / AdminSite.get_urls(), and the registry payload (registry.py:133-221) emits only model metadata + the four permission booleans. A consumer who adds bespoke admin pages — custom change-form buttons, report / import-export views, dashboards — via get_urls() (a very common admin extension) has no way to reach or render them from the SPA. For shops that rely on custom admin views, this blocks a full swap.
Direction
Surface the consumer's extra admin URLs (those in get_urls() beyond the standard CRUD routes) so the SPA can link out to them — open the legacy-rendered page (Django's own admin templates) in a new tab/iframe, or expose a per-model / index "custom views" menu. A link-out is enough to unblock; full SPA rendering of arbitrary custom views is out of scope.
Where
api/urls.py, api/registry.py (expose custom-view links), urls.py catch-all.
Acceptance
- A consumer's custom admin view is reachable from the SPA (linked), not orphaned.
Problem (swap blocker)
The package exposes a fixed JSON API surface (
api/urls.py:84-176) + an SPA catch-all (urls.py:55). Nothing introspectsModelAdmin.get_urls()/AdminSite.get_urls(), and the registry payload (registry.py:133-221) emits only model metadata + the four permission booleans. A consumer who adds bespoke admin pages — custom change-form buttons, report / import-export views, dashboards — viaget_urls()(a very common admin extension) has no way to reach or render them from the SPA. For shops that rely on custom admin views, this blocks a full swap.Direction
Surface the consumer's extra admin URLs (those in
get_urls()beyond the standard CRUD routes) so the SPA can link out to them — open the legacy-rendered page (Django's own admin templates) in a new tab/iframe, or expose a per-model / index "custom views" menu. A link-out is enough to unblock; full SPA rendering of arbitrary custom views is out of scope.Where
api/urls.py,api/registry.py(expose custom-view links),urls.pycatch-all.Acceptance