如何优化模型?

2024-03-28 11:59:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个代码,我想优化:

articles = Articles.objects.filter(active=True).all().order_by('-added')[start_from:per_page+start_from]
tags = dict()
for article in articles:
    tags[article.id] = Tags.objects.filter(articles=article).all()

我认为代码可以,但它们返回错误:

articles = Articles.objects.filter(active=True).all()[start_from:per_page+start_from]
articles_tags = Tags.objects.filter(articles__in=articles).all()
tags = dict()
for article in articles:
        tags[article.id] = articles_tags.filter(articles=article).all()

错误消息

(1235, "This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'")

Tags: 代码infromtrueobjectsarticletagspage
1条回答
网友
1楼 · 发布于 2024-03-28 11:59:23

由于您使用的是django1.4,请尝试在查询集上使用prefetch_related。它通过运行一个单独的查询来获取许多字段,然后在Python中将这两个字段结合在一起。这样,您将使用2个查询而不是1+n个查询来检索所有数据:

# Fetch articles
articles = Articles.objects.filter(active=True) \
    .prefetch_related('tags')[start_from:per_page+start_from]

# Eat a donut
logging.info('omnomnomnom')

https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related

相关问题 更多 >