0

私はこのコードを持っています。最適化したいものです:

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'")
4

1 に答える 1

0

Django 1.4 を使用prefetch_relatedしているので、QuerySet で使用してみてください。これは、別のクエリを実行して ManyToMany フィールドをフェッチし、Python で 2 つを結合します。このようにして、1 + n クエリではなく 2 つのクエリを使用してすべてのデータを取得します。

# 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

于 2012-08-21T21:25:25.740 に答える