Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PreTech一个类实例的多对多关系_Python_Django_Django Views_Django Orm - Fatal编程技术网

Python PreTech一个类实例的多对多关系

Python PreTech一个类实例的多对多关系,python,django,django-views,django-orm,Python,Django,Django Views,Django Orm,我想限制对详图视图的查询。我想在更少的查询中访问一个类实例的多对多字段。它似乎不适用于get,服务器会针对每个多个字段访问数据库 JobInstance=Job.objects.get(pk=id).预回迁相关(“城市”).预回迁相关(“体验级别”)您可以通过重新排序让它工作,如: job_instance = Job.objects.prefetch_related('cities', 'experience_level').get(pk=id) job\u实例=job.objects.pre

我想限制对详图视图的查询。我想在更少的查询中访问一个类实例的多对多字段。它似乎不适用于
get
,服务器会针对每个多个字段访问数据库

JobInstance=Job.objects.get(pk=id).预回迁相关(“城市”).预回迁相关(“体验级别”)

您可以通过重新排序让它工作,如:

job_instance = Job.objects.prefetch_related('cities', 'experience_level').get(pk=id)
job\u实例=job.objects.prefetch\u相关('cities','experience\u level').get(pk=id)
在执行
.get(…)
时,在
查询集上定义了与
.prefetch\u相关的(…)
,然后获取对象,不再使用查询集

但是对于单个对象,
.prefetch\u related(..)
而不是提高效率。毕竟,
.prefetch\u related(..)
将在这里进行两个额外的查询,以获取相关对象,与不预取一样多,然后评估
作业实例的相关对象


.prefetch\u related(..)
因此在批量获取多个对象的相关对象时非常有用。

使用prefetch\u related时,它实际上会再次命中数据库。最好调用返回数据的类实例的函数。@csandreas1:well
prefetch\u related
job\u instance.cities.all()
(没有这样的预取)都会导致额外的查询,因此,正如所说的,您不会“获得”
.select\u related(…)
将“背驮”查询以获取对象,但您不能将其用于一对多关系或多对多关系,因为这可能会生成大量重复记录。它实际上有好处!当多次使用带有关联数据的模板标记时,我不会点击database@csandreas1:如果您将
job\u instance.cities.all()
存储在某个地方,它也不会再次访问数据库。它多次点击的原因是,如果您定义
job\u instance.cities.all()
,您将复制旧的queryset,而没有缓存行为。