在 Django 通道中执行数据库查询

Perform database query in Django channels

我正在尝试创建一个非常简单的系统,用户为了使用消费者,需要在 WS url 中输入一个密钥,例如:ws://127.0.0.1:8000/main?key=KEY。一旦消费者被调用,Django Channels 需要执行一个非常简单的数据库查询来检查键是否存在:

class TestConsumer(AsyncJsonWebsocketConsumer):
    async def websocket_connect(self, event):
        ...
        key_query = await database_sync_to_async(keys.objects.get(key=key))
        ...

但是这段代码的问题在于它会给出以下错误:

You cannot call this from an async context - use a thread or sync_to_async.

有什么办法可以实现吗?任何建议表示赞赏!

database_sync_to_async 必须在方法上调用,而不是在方法的结果上调用:

key_query = await database_sync_to_async(keys.objects.get)(key=key)