Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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
Jquery 从Django中的ForeignKey获取QuerySet_Jquery_Django_Django Models - Fatal编程技术网

Jquery 从Django中的ForeignKey获取QuerySet

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.

我在Django有两种型号:

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。添加了文档中的引用以解释其工作原理。