I feel sufficiently old after having read South in this article. Good god what a throwback.

Django is hands down one of my favorite frameworks ever created, and the only one I still reach for in some contexts. For a lot of projects I use it to drive database migrations, and stand up an easy admin portal for others to use - then anything else is driven by an API layer written in (e.g) Rust.

I haven't had to care about Django's performance in years but still get to reap some of the benefits.

How do your API calls get into the Django app(s)? Do you define the API as well on the Django side (duplicating the API)? Or is there some tool that translates the Rust API calls for Django efficiently?

In practice, I've found you never want to be duplicating full models on the API side - you're only querying specific fields so you end up with custom/ad-hoc structs instead of ORM objects like you'd have in Django.

Just read from the database and treat Django as a DB builder/migrator/inspector.

Going to guess they explicitly map the database tables (and do it all as read-only perhaps) to allow admins to view and report on data from the API.