我无法弄清楚prefetch_related('arg_set')和prefetch_related('arg')之间的区别。
有时prefetch_related不工作时,使用参数'arg'甚至'arg_set'工作。
我已经搜索了整个docs.djangoproject.com,但至少,我不能在下面两页找到相关文件。https://docs.djangoproject.com/en/2.1/ref/models/querysets/ https://docs . django project . com/ja/2.1/ref/contrib/content types/
你们中的一些人能详细说明两者的区别吗?我想阅读与此问题相关的官方文件,因此请向我展示参考链接。
提前谢谢你。
环境:windows10,python 3.7.2,django 2.1.8,sqlite3,PyCham 2019.1。
views.py
from django.shortcuts import render
from .models import Article
def index(request):
a = Article.objects.all().select_related('user').prefetch_related('comment_set').order_by('id') # [1]
a = Article.objects.all().select_related('user').prefetch_related('comment').order_by('id') # [2]
return render(request,
'sns/index.html',
{'articles': a})
models.py
from django.db import models
from article_comment_model.settings import AUTH_USER_MODEL
class Article(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='article_user')
title = models.CharField(max_length=100)
text = models.TextField()
class Comment(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='comment_user')
article = models.ForeignKey(Article, on_delete=models.CASCADE)
text = models.TextField()
我想很好地理解各种与prefetch _相关的参数。
prefetch_related
中使用的查找名称取决于以下几个问题的答案:
如果关系是在您正在查询的模型上定义的(Django文档称为“前向关系”),那么查找只是字段名。如果关系是在关系的另一端定义的(“向后关系”),那么查找取决于第二个问题:
related_name
?如果是,则查找是related_name
。如果没有related_name
,Django使用默认名称,即modelname_set
用于x对多关系,模型名称
用于x对一关系(均为小写)。
实际上,这意味着您的代码中的以下内容:
# no related names defined, using default manager name
Article.objects.prefetch_related('comment_set')
# using related names
User.objects.prefetch_related('article_user', 'comment_user')
Article.objects.prefetch_related('user')
Comment.objects.prefetch_related('article', 'user')
像上面最后两个例子那样使用prefetch_related
处理x对1关系是很少见的。我们主要使用select_related
,因为后者只在原始查询中创建连接,而不是发出单独的查询。但是,正如您可以在其留档末尾阅读的那样,prefetch_related
有一些潜在的优势。它可以:
仅
通过和延迟
)取
调用< code>prefetch_related()的参数是关系的名称。在您的情况下,这将是一个反向的< code>ForeignKey关系。正如您在文档中看到的,反向关系的名称将是< code>FOO_set,其中< code>FOO是模型的小写名称。
因此,在您的示例中,prefetch_related('comment_set')
应该是正确的。如果您指定一个related_name
例如
article = models.ForeignKey(Article, on_delete=models.CASCADE,
related_name='comments')
related_name
将被使用而不是FOO_set
,因此在这种情况下prefetch_related(“注释”)
应该是有效的。
本文向大家介绍JavaScript的各种常见函数定义方法,包括了JavaScript的各种常见函数定义方法的使用技巧和注意事项,需要的朋友参考一下 本文详细讲述了JavaScript的各种常见函数定义方法,分享给大家供大家参考。具体分析如下: 首先看一下JavaScript最常见的四种函数定义: 用Function构造函数定义的函数,代码如下: 函数声明,这种方式也是最为常见的一种: 函数表达式,
本文向大家介绍python函数的5种参数详解,包括了python函数的5种参数详解的使用技巧和注意事项,需要的朋友参考一下 (1) 位置参数,调用函数时按位置传入参数 (2) 默认参数,即在函数定义时就给出参数的值,设置默认参数时要注意两点,一是必选参数在前,默认参数在后。二是把变化小的参数放在后面可作为默认参数。具有默认参数的函数被调用时可以不传入默认参数,若需要改变默认
问题内容: 我正在寻找一个总结我一直看到的NoSQL数据库主要属性的地方- 特别是MongoDB,Riak,Redis,Memcached,Membase和Cassandra。查询的类型,类型,扩展的架构/属性等。全部在内存中,溢出到磁盘,在磁盘上备份还是仅在内存中索引? 问题答案: 也许它总结了各种NoSQL数据库(您更在第一时间详细源和点)基本信息的最佳来源之一,是这个网站。除此之外,您还应该
本文向大家介绍php通过各种函数判断0和空,包括了php通过各种函数判断0和空的使用技巧和注意事项,需要的朋友参考一下 函数对0的判断 对空的判断 补充:下面给大家介绍下php 语法里0不等于null为空的解决办法 今天遇到这样一个问题是这样的: php 语句里,我想判断一个值大于等于0. 我是使用 ($value !=null && $value >=0), 返回的结果为空,这点真的好奇怪。 实
英特尔C编译器和/或GCC是否像2012/2013年以来的MSVC一样支持以下英特尔内部函数 如果支持这些内部函数,那么支持哪个版本(请使用编译时常量)?
本文向大家介绍PHP PDO fetch 模式各种参数的输出结果一览,包括了PHP PDO fetch 模式各种参数的输出结果一览的使用技巧和注意事项,需要的朋友参考一下 PDO 的 fetch 模式功能实在是太方便了,但每次要产生想要的结果都要试太麻烦了,这里列出可能的组合。