django - Django 路径转换器引发 SynchronousOnlyOperation
问题描述
我正在将现有的 WSGI 服务器迁移到 ASGI,并且遇到了路径转换器中使用 ORM 引发 SynchronousOnlyOperation 异常的问题。
我的转换器代码是这样的
class ModelPkConverter:
regex = r'\d+'
model = MyModel
def to_python(self, primary_key):
try:
return self.model.objects.get(pk=primary_key)
except self.model.DoesNotExist:
raise ValueError
def to_url(self, instance):
return f'{instance.pk}'
所以当我去一个像/myapp/<MyModel:my_model>/
我一样的网址时
django.core.exceptions.SynchronousOnlyOperation:您不能从异步上下文中调用它 - 使用线程或 sync_to_async。
我到底应该放在sync_to_async
哪里?如果我像这样在转换器中这样做
@sync_to_async
def to_python(self, primary_key):
...
转换器输出一个协程对象而不是 MyModel 实例,所以当我尝试使用它时会得到 AttributeError 。
AttributeError:“协程”对象没有属性“my_attribute”
我应该await
在视图中看到它吗?这将破坏使用转换器的目的。我只能这样做get_object_or_404
。
是否有不涉及设置DJANGO_ALLOW_ASYNC_UNSAFE
为 True 的解决方案?在这一点上,我正在考虑将所有东西从转换器中重构出来,并<int:mymodel_id>
在任何地方使用。还有其他方法吗?
解决方案
推荐阅读
- react-native - React Native Flatlist scrollToIndex 失败
- python - 从 csv 和训练中删除重复数据(Keras、python、pandas)
- python - 多处理挂起 xgboost 评分
- reactjs - 如何在 reactjs 中忽略 webpack 配置中的 js 文件
- snowflake-cloud-data-platform - 雪花动态过程语句。Execute() 返回值
- react-native - React Native Navigation Animation 幻灯片实现
- haskell - 如何防止递归定义的 optparse-applicative 解析器挂起?
- arrays - 如何从 MongoDB/Mongosh 中删除单个对象/数组
- python - 对于变量内的循环
- python - xhtml2pdf:将生成的 PDF 输出为内存对象(其字节)