Thanks for the explanation!

To get it working, I will replace my model converters with basic converters 
and do corresponding lookups in the views.

On Sunday, 20 June 2021 at 16:16:58 UTC-7 Andrew Godwin wrote:

> Ah yes, that's because the URL parsing/conversion all happens in the main 
> (async, in ASGI mode) thread - and because to_python is a a synchronous 
> function interface, there is literally nothing you can do to make it work.
>
> The only real way of fixing this would be for Django to patch the URL 
> converters and run them all in a synchronous mode unless they were 
> decorated as "safe" somehow, much like we do for middleware. It's not a 
> terribly hard patch to make, but it does mean you don't have an immediate 
> solution. There are ways of trying to work around it, but they will all 
> result in you blocking the async thread while the ORM query runs, which 
> would be disastrous in production.
>
> My apologies for not getting this in for the original async view patch - I 
> had forgotten converters ran in the URL resolver.
>
> Andrew
>
> On Sat, Jun 19, 2021, at 12:31 AM, [email protected] wrote:
>
>
> I'm trying to switch from WSGI to ASGI and I'm having issues with my model 
> id to model converters.
> I define my converters like this
> def to_python(self, primary_key):
>      try:
>           return self.model.objects.get(pk=primary_key)
>      except self.model.DoesNotExist:
>           raise ValueError
> When I go to a url where a converter is used I get a 
> SynchronousOnlyOperation.
> Seems like converters are executed in an async context.
> If I use sync_to_async, I get a coroutine in my view instead of a model 
> instance. Awaiting it here would defeat the purpose of having a converter.
>
> Any ideas how to fix this?
>
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/django-users/ef60ed71-7f4f-482d-b540-bdf89e249aa4n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/django-users/ef60ed71-7f4f-482d-b540-bdf89e249aa4n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/c130ef88-4dbf-42b9-a7b3-f0ba0b174a0an%40googlegroups.com.

Reply via email to