Jquery 从Django中的ForeignKey获取QuerySet
我在Django有两种型号:Jquery 从Django中的ForeignKey获取QuerySet,jquery,django,django-models,Jquery,Django,Django Models,我在Django有两种型号: class Category(models.Model) .... class Article(models.Model) category=models.ForeignKey(Category,on_delete=models.CASCADE,blank=True,null=True) 我想用一些过滤器获得一些类别,以及同一查询中该类别的所有文章 我尝试使用annotate,但我不知道如何使用正确的语法 categories = Category.
class Category(models.Model)
....
class Article(models.Model)
category=models.ForeignKey(Category,on_delete=models.CASCADE,blank=True,null=True)
我想用一些过滤器获得一些类别,以及同一查询中该类别的所有文章
我尝试使用annotate,但我不知道如何使用正确的语法
categories = Category.objets.filter(whatever='whatever').annotate('article')
您可以使用
prefetch\u related
并从文章
模型中使用选择\u related
从
prefetch\u related
,对每个关系执行单独的查找,并在Python中执行“连接”。这使得它可以预取多对多和多对一对象,这是使用select_related无法完成的,另外还有select_related
支持的外键和一对一关系。它还支持预取genericorrelation
和GenericForeignKey
,但是,它必须限于一组相同的结果。例如,仅当查询被限制为一个ContentType
时,才支持对GenericForeignKey
引用的对象进行预取
这个例子就像你的模型一样,我有一个团队
对象,它在条目
模型上有一个FK
team=team.objects.prefetch\u相关(
“入口集”
).filter(id=team_id).first()
除非您在FK字段上设置了一个相关的\u名称
,否则django将以型号名称的小写格式进行相关设置,后跟\u集
。因此,您的类别
将为相关文章设置一个文章集
正如我所说的,select\u realted
会做相反的事情。以这个模式为例,
类别社会帐户(models.Model):
user=models.ForeignKey(allauth.app\u settings.user\u MODEL,on\u delete=models.CASCADE)
在同一查询中,可以通过执行以下操作获取FK关系的相关对象:
social\u账户=SocialAccount.objects.select\u相关(
“用户”
).get(uid=user\u id)
您可以使用预取相关的
并从文章
模型中使用选择相关的
从
prefetch\u related
,对每个关系执行单独的查找,并在Python中执行“连接”。这使得它可以预取多对多和多对一对象,这是使用select_related无法完成的,另外还有select_related
支持的外键和一对一关系。它还支持预取genericorrelation
和GenericForeignKey
,但是,它必须限于一组相同的结果。例如,仅当查询被限制为一个ContentType
时,才支持对GenericForeignKey
引用的对象进行预取
这个例子就像你的模型一样,我有一个团队
对象,它在条目
模型上有一个FK
team=team.objects.prefetch\u相关(
“入口集”
).filter(id=team_id).first()
除非您在FK字段上设置了一个相关的\u名称
,否则django将以型号名称的小写格式进行相关设置,后跟\u集
。因此,您的类别
将为相关文章设置一个文章集
正如我所说的,select\u realted
会做相反的事情。以这个模式为例,
类别社会帐户(models.Model):
user=models.ForeignKey(allauth.app\u settings.user\u MODEL,on\u delete=models.CASCADE)
在同一查询中,可以通过执行以下操作获取FK关系的相关对象:
social\u账户=SocialAccount.objects.select\u相关(
“用户”
).get(uid=user\u id)
在您的情况下,您只需要使用预回迁相关的
,并且由于您处于反向外键查询中,您需要将_集添加到文章模型中
categories=Category.objets.prefetch\u related('article\u set').filter(whatever='whatever')
在您的案例中,您只需要使用prefetch\u related
,并且由于您处于反向外键查询中,因此需要向文章模型添加_set
categories=Category.objets.prefetch\u related('article\u set')。filter(whatever='whatever')
Category\u实例。article\u set
将为您提供给定类别的所有文章。注意:这将对数据库执行多个查询(每次使用一个),如果需要,可以使用prefetch\u related
一起执行所有这些查询。(不可能在一个数据库查询中获得多个关系,这是ORM的构建方式)category\u实例。article\u set
将为您提供给定类别的所有文章。注意:这将对数据库执行多个查询(每次使用一个),如果需要,可以使用prefetch\u related
一起执行所有这些查询。(不可能在一个数据库查询中获得多个关系,这是ORM的构建方式)您应该指定prefetch\u related
将对数据库执行多个查询。@AbdulAzizBarkat。添加了文档中的引用以解释其工作原理。您应该指定prefetch\u related
将对数据库执行多个查询。@AbdulAzizBarkat。添加了文档中的引用以解释其工作原理。