Python 使用Django中的项目列表以分类形式获取queryset
我的个人模型如下:Python 使用Django中的项目列表以分类形式获取queryset,python,django,django-orm,Python,Django,Django Orm,我的个人模型如下: class person(models.Model): interests = models.ManyToManyField(Ineterest, default=None) class Article(models.Model): category = models.ManyToManyField(Interest, default=None) 利息模型: class Interest(models.Model): int
class person(models.Model):
interests = models.ManyToManyField(Ineterest, default=None)
class Article(models.Model):
category = models.ManyToManyField(Interest, default=None)
利息模型:
class Interest(models.Model):
interest = models.CharField(max_length=100)
文章模型如下:
class person(models.Model):
interests = models.ManyToManyField(Ineterest, default=None)
class Article(models.Model):
category = models.ManyToManyField(Interest, default=None)
我只想筛选分类形式的文章,列出与之相关的所有文章示例如下:
[{'category':'Finance','articles':['articleobj-1','articleobj-2']},{'category':'Business','articleobj-1','articleobj-2','articleobj-3']}
可以通过访问反向多对多来完成。
需要与预取相关的,以避免进行多次查询
qs = Interest.objects.prefetch_related('article_set')
[{'category': i.interest, 'articles': [a for a in i.article_set.all()]} for i in qs]
很好,但当我将在生产版本中使用时,由于ForLoop,从AWS DB中获取文章需要时间,因此有没有办法在没有ForLoop的情况下获取相同的queryset?无论您有多少文章和兴趣,这只会创建2个数据库查询
prefetch\u related
会处理好的,我会实现它,让我们看看这个查询有多有效?是的。您可以使用django调试工具栏监视它创建的数据库查询。