Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Django预取相关';s预取,订购人?_Django - Fatal编程技术网

Django预取相关';s预取,订购人?

Django预取相关';s预取,订购人?,django,Django,我计算了以下查询: context['user_artists'] = Artist.objects.filter(users=current_user).all() 再加上模板中的以下用法: {% if user_artists %} ... {% for artist in user_artists %} .... <p class="small">last release: {{ artist.release_groups.l

我计算了以下查询:

 context['user_artists'] = Artist.objects.filter(users=current_user).all()
再加上模板中的以下用法:

{% if user_artists %}
    ...
    {% for artist in user_artists %}
        ....
        <p class="small">last release: {{ artist.release_groups.last.title }}</p>
        <p class="small">date: {{ artist.release_groups.last.release_date }}</p>
我还需要消除
.last
的用法,因为它意味着另一个查询。我可能可以使用模板引擎的
slice
方法来获取最后一个元素。但是,我必须对相关关系进行排序:也就是说,在我在模板中访问它们之前,我需要按照它自己的发布日期进行排序。这不得影响艺术家对象的顺序


如何做到这一点?

您可以使用
预回迁

Artist.objects.prefetch_related(Prefetch('release_groups', queryset=ReleaseGroup.objects.order_by('release_date')))
为避免与名称冲突,您可以将
设置为\u attr
设置为其他名称:

Artist.objects.prefetch_related(Prefetch('release_groups', queryset=ReleaseGroup.objects.order_by('release_date'), to_attr='rgs')).all()
然后,您可以访问模板中的每个缓存发布组,如下所示:


artist.rgs.0.title

是否尝试预取:
artist.objects.Prefetch\u相关(Prefetch('release\u groups',queryset=ReleaseGroup.objects.order\u by('release\u date'))
这看起来像我需要的。尝试过了,但我在评估每个艺术家的第n个元素时遇到了问题。发布组| slice::1“在所有方面都没有返回任何元素,这是在考虑我需要该对象的特定属性之前。然后如何在模板中访问它?@zerohedge
Artister.release\u groups.all.0
Artister.release\u groups.first
-这会返回查询数量,就好像根本没有使用预回迁相关的查询一样。返回:“变量和属性不能以下划线开头:'艺术家。\预回迁\对象\缓存。发布\组。0'”是的。我找到了原因:名称冲突。我建议对您的答案进行编辑。
Artist.objects.prefetch_related(Prefetch('release_groups', queryset=ReleaseGroup.objects.order_by('release_date'), to_attr='rgs')).all()