While I think FastAPI is great in its first class async support, Django has the Django ORM, plus Django Admin, which for me have been indisposable.
Django may be considered boring and old school, but it does so many things right that the barrier to switching is quite high.
How do you like the ORM for FastAPI? I've wanted to try it but since I already know how to use django it's been hard to find a reason to try FastAPI. Currently I _really_ like Django's orm.
For me neither Django nor SQLAlcjemy hit the right spot when trying to define “pure” domain models that have no dependency (I.e. no ORM information). For that I created a repository pattern approach that converts “domain mode operations” into SQLModel query operations via filter specifications (https://martinfowler.com/apsupp/spec.pdf).
The result is that I always need to define 2 models: one is my pure domain model and another is a “table model” (defined in SQLAlchemy) along with a mapping between the two (for cases where there’s no 1-to-1 trivial mapping between their fields). Also making some of the SQLAlchemy magic (for example back propagating relational attributes) is messy.
But if you want to produce some quick applications I think SQLModel+FastAPI works quite well. I don’t think is as mature as Django though.
For non-db backed projects (but let's be honest, how many projects don't use a DB) FastAPI is a great choice.
For new projects async runtimes are enticing but its really hard to switch to or from a async runtime with an existing project. Similarly moving to or from the Django ORM or SQLAlchemy + Pydantic is too much work for most to justify.
So whatever fully featured framework you start with will be the one you stick with. They all have warts and hurdles but should get you where you need to be from a business perspective.