繁体   English   中英

如何防止 Django 的 prefetch_related 缓存查询集

[英]How to prevent Django's prefetch_related from caching a queryset

对于参数model,我有以下查询集 function:

class ArgumentQuerySet(QuerySet):
    def prefetch_related_objects(self):
        from views.models import View

        return self.prefetch_related(
            Prefetch(
                'argument_reactions',
                queryset=View.objects.filter(type=ViewType.ARGUMENT_REACTION.name,
                                             reaction_type=ReactionType.ENDORSE.name),
                to_attr='endorsement_reactions'
            ),
            Prefetch(
                'argument_reactions',
                queryset=View.objects.filter(type=ViewType.ARGUMENT_REACTION.name,
                                             reaction_type=ReactionType.DISAGREE.name),
                to_attr='disagreement_reactions'
            ),
        )

如您所见,我正在尝试使用不同的查询集预取相同的关系,并且我还在使用Prefetch object 的to_attr参数。 问题是第二次预取不能正常工作, discomparation_reactions列表是空的。 但如果我删除第一个预取,它会起作用。 我相信第一个查询集,即View.objects正在以某种方式被缓存。 我怎样才能防止这种情况?

根据 Django 文档,您可以通过:

queryset.prefetch_related(None)

因为它将清除任何 prefetch_related 行为

这是它的参考点击这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM