Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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 在Wagtail页面中是否可以使用与检索相关(父、子页面)相关的预取_?_Python_Django_Wagtail - Fatal编程技术网

Python 在Wagtail页面中是否可以使用与检索相关(父、子页面)相关的预取_?

Python 在Wagtail页面中是否可以使用与检索相关(父、子页面)相关的预取_?,python,django,wagtail,Python,Django,Wagtail,我面临的问题是重复的查询数量,这使得应用程序在使用页面模型上的get_parent或get_children时速度变慢。如果父页面具有模板中使用的图像文件,则该值也会增加 因此,我正在寻找一种方法,在不建立外键关系的情况下预取与您相关的页面 假设我有一个电视连续剧页面模型和一个插曲页面模型: class TvSeries(Page): name = models.CharField() producer = models.CharField() subpage_type

我面临的问题是重复的查询数量,这使得应用程序在使用页面模型上的get_parent或get_children时速度变慢。如果父页面具有模板中使用的图像文件,则该值也会增加

因此,我正在寻找一种方法,在不建立外键关系的情况下预取与您相关的页面

假设我有一个电视连续剧页面模型和一个插曲页面模型:

class TvSeries(Page):
    name = models.CharField()
    producer = models.CharField()

    subpage_types = ['Episode']
查询剧集模型时需要预取电视剧!如何减少数据库调用?是否可以使用预取和选择相关?如果是,怎么做?。如果没有,那么增加的查询数量的解决方案是什么?

prefetch\u related不能用于父/子页面关系,因为它们不使用标准的Django ForeignKey关系-相反,Wagtail和Treebeard使用路径字段来表示树的位置。这使得执行不能用ForeignKey高效完成的查询成为可能,例如获取页面任何深度的所有子代

应该注意的是,预取_相关的不是免费的-它将为后面的每个关系生成一个额外的查询。Treebeard的查询方法在效率上通常与此相同或更好-例如:

series = TvSeries.objects.get(id=123)
episodes = series.get_children()
将在两个查询中获取一部电视剧及其所有剧集,就像假设的预回迁相关表达式一样:

# fake code, will not work...
series = TvSeries.objects.filter(id=123).prefetch_related('child_pages')
但是,get_子项的一个问题是,它只返回基本页面实例,因此需要进一步查询才能从事件中检索特定字段。您可以使用child_代替:


它只扩展了一个模型页面,在电视系列和插曲之间没有任何特殊的内容?你能给我展示一下我用的是Wagtail CMS吗。继承从Django Treebeard继承的页面模型问题是当您有多个对象时。假设我们想与他们的父母一起检索最近的30集:latest_scents=spoint.objects.all[:30]>>>现在你必须为每一集获取父母或父母。这是30分贝的调用。如果父对象有图像文件,那么您将有更多的30分贝调用。我开始认为最好的解决方案是创建ParentalKey或编写自己的原始查询。thanksI我也在努力解决这个问题树结构确实允许一些漂亮的东西,但是我们更需要一个简单的父查找。。。prefetch_-related不是免费的,但select_-related会转换为标准联接-因为每个页面只能有一个直接父级,我还发现子页面无法通过一个查询获得其父级也令人沮丧。我想我们还将添加一个父指针id或类似的。。。
# fake code, will not work...
series = TvSeries.objects.filter(id=123).prefetch_related('child_pages')
series = TvSeries.objects.get(id=123)
episodes = Episode.objects.child_of(series)