Calling the synchronous ORM from an async def view, or from any coroutine, raises SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async. Django's database connections are not safe to touch from the event loop, so the check is deliberate and fires on the first query, not at import.
The surprise is how easily it happens by accident. Iterating a queryset, touching a lazily loaded foreign key, or letting a template render a related object inside an async view all trigger it, even though nothing in the code looks like a query.
Three fixes exist. Use the async ORM methods added in Django 4.1, such as await Model.objects.aget(pk=1), acreate, asave, and async for obj in queryset. Wrap a block of synchronous ORM work with await sync_to_async(fn, thread_sensitive=True)(...). Or make the view synchronous, which is fine and often faster than the alternatives. Note that thread_sensitive=True is the default and keeps everything on one thread so transactions behave; setting it False with transactions is a way to get very confusing bugs.