使用序列化器实现异步视图 Django 3.1

5

我正在尝试创建一个异步视图来解决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

我尝试在视图代码中在Serializer之前加上await关键字,并将async属性添加到get_custom_field方法中(使用db查询中的sync_to_async运算符)。但没有任何结果。

有人知道如何解决这个特定的问题吗?

1个回答

0
首先,创建一个用于获取序列化数据的函数:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接