Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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
如何避免N+;在django计数时为1_Django - Fatal编程技术网

如何避免N+;在django计数时为1

如何避免N+;在django计数时为1,django,Django,请看以下场景: 我有一个用户模型和一个属于用户的地址模型 在用户索引中,我需要在显示用户信息的同时显示用户有多少地址,但每次我调用count时,它都会生成N+1个查询,因为它会对该用户id执行额外的查询 我该怎么做?我读过关于select\u related的文章,但我正试图按照相反的顺序来做 在SQL中,它可以转换为: SELECT user.*, (SELECT count(*) FROM address WHERE address.user_id = user.id) AS address

请看以下场景:

我有一个
用户
模型和一个属于用户的
地址
模型

在用户索引中,我需要在显示用户信息的同时显示用户有多少地址,但每次我调用
count
时,它都会生成N+1个查询,因为它会对该用户id执行额外的查询

我该怎么做?我读过关于
select\u related
的文章,但我正试图按照相反的顺序来做

在SQL中,它可以转换为:

SELECT user.*,
(SELECT count(*) FROM address WHERE address.user_id = user.id) AS address_count
FROM user
有没有办法通过django QuerySet获取上述SQL?

您可以查看地址的数量,您还没有显示您的模型,但可以在您的QuerySet上使用以下内容

.annotate(address_count=Count('address'))
User.objects.all().annotate(address_count=Count('address'))  # Im guessing you want this
这将为每个结果提供一个
address\u count
属性

文档用于

您可以查看地址的数量,您尚未显示您的型号,但您可以在查询集中使用以下内容

.annotate(address_count=Count('address'))
User.objects.all().annotate(address_count=Count('address'))  # Im guessing you want this
这将为每个结果提供一个
address\u count
属性


@IgorBelo的文档-不用担心,尽情享受@IgorBelo-不用担心,享受吧!