本文的主要首席技术官将介绍如何控制Django序列化结果和Django的背部序列化的相关内容。我希望这对每个人都会有所帮助。让我们来看看。
本文目录清单:
django模型,QuerySet序列化为JSON错误5。Django查询通过QUERY数据库序列化获得的结果序列化到JSON字符串,以求解Django“ Laziness”的基本方法
现在,我们解决此问题的方法是“预载”。本质上,您要预先警告django orm,您必须一遍又一遍地告诉它相同的无聊指令。在上面的示例中,很容易添加此句子在DRF开始之前:
querySet = queryset.prefetch_reled('orders')
当DRF调用上述客户的相同序列化时,情况就是这样:
获取所有客户(执行两个回合数据库操作,第一个是获取客户,第二个是获得相关客户的所有相关顺序。)。
对于第一个客户,获取其订单(无需访问数据库,我们在上一步中获得了所需的数据)
对于第二个返回客户,获取订单(无需访问数据库)
对于第三个返回客户,获取订单(无需访问数据库)
对于第四个返回客户,获取订单(无需访问数据库)
对于第五返回客户,获取订单(无需访问数据库)
对于第六返回客户,获取订单(无需访问数据库)
您意识到您可以有很多客户,并且不再需要继续等待数据库。
实际上,在步骤1中请求Django Orm的“准备”,该步骤1可以在本地高速缓存数据中提供步骤2+所需的数据,并具有先前数据库,从本地缓存数据中读取数据基本上是瞬时的,因此我们有当我们有很多客户时,获得了巨大的性能加速。
解决Django REST框架的性能的标准化模式
我们已经确定了一种通用模式,可以优化Django REST框架的性能,也就是说,每当序列化查询嵌套字段时,我们添加了一个新的@StaticMethod,名为Setup_eager_loading,如下:
班级CobuliteRializer(Serializers.ModelSerializer):
orders = orderSerializer(许多= true,read_only = true)
def setup_eager_loading(cls,querySet):
“”“”执行不加载数据。“”“”“”“”“”“”
querySet = queryset.prefetch_reled('orders')
返回QuerySet
这样,无论您在何处使用此序列化,您只需要在调用serialization之前只调用setup_eager_loading,就像这样::
customer_qs = customer.objects.all()
customer_qs = cusiteerializer.setup_eager_loading(customer_qs)#设置急切的加载以避免n+1选择
post_data = cusiteerializer(customer_qs,多个= true).data。
或者,如果您有Apiview或Viewset,则可以在get_queryset方法中调用setup_eager_loading ::
def get_queryset(self):
querySet = cunituter.objects.all()
#设置急切的加载以避免n+1选择
querySet = self.get_serializer_class()。setup_eager_loading(querySet)
返回QuerySet
1.创建一个新的Jupyter笔记本电脑文档。
2.定义列表并打印以查看结果。list= [3,9,-7] prop(列表)。
3.将一个数字添加到list.list.append(10)打印(列表)。
4.还可以添加字符串。list.Append(“ String 123”)打印(列表)。
5.列表可以包含其他列表。list.append([-3,-4])打印(列表)。
6.如果要删除最后一个列表的值,则可以像this.list.pop()prop()一样处理它。
1.模型字段
从模型的定义可以看出,这些环境和发布的这些领域可能没有
第二,过滤器
六个,邮递员测试
使用该序列化函数,您可能需要对QuerySet和单个模型对象进行一定数量的补充序列化。
我个人这样做:遍历QuerySet,将单个对象转换为字典,然后将每个字典对象添加到一个空列表中,然后使用JSON.DUMPS(dictobject_list)转换JSON字符串。
基本构建的对象也可以解决其他语言的JSON对象转换。
class goodsListView(查看):
如果您遇到无法以JSON格式执行的格式,例如UUID,则需要执行str()函数转换
结论:以上是为每个人汇编的主要CTO注释的所有内容,以控制Django序列化的结果。感谢您阅读本网站的内容。我希望这对您有帮助。不要忘记找到序列化结果的相关内容。
