如何避免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-不用担心,享受吧!