我正在尝试创建一个异步视图来解决 Django 3.1 的端点问题。
我有我的 AsyncView,在这个视图中我有下一个代码行:
try:
db_result= await sync_to_async(list)(Plan.objects.filter())
serializer = MySerializer(db_results, many=True)
return serializer.data
except Exception:
# Handle Exception Code
在我的序列化器中,我有一个自定义字段。使用其 obj 属性对数据库进行其他查询来检索其数据。这是我遇到一些问题的地方,因为这是一个异步上下文。
序列化器代码:
MySerializer(serializers.ModelSerializer):
custom_field = serializers.SerializerMethodField(required=False)
def get_custom_field(self, obj):
try:
# This is failing, is not retrieving data from DB since it's async context
related_stuff = obj.related_stuff.filter(filter_condition=filter_condition)
# More code after this
.
.
.
.
return custom_field_object
except Exception:
return None
我尝试在视图代码中的序列化器之前放置一个等待,并将 async 属性添加到 get_custom_field 方法(使用数据库查询中的sync_to_async 运算符)。什么都没有。
有人知道如何解决这个具体问题吗?
首先制作一个获取序列化数据的函数:
def get_serialized_data(db_results):
serializer = MySerializer(db_results, many=True)
return serializer.data
现在更改您的异步视图,如下所示:
try:
db_results = Plan.objects.all()
return await sync_to_async(get_serialized_data)(db_results)
except Exception:
# Handle Exception Code