3

クエリセットで「in」演算子を使用すると、最初の呼び出しで失敗します。

編集4:

誰でも簡単にテストできるように、問題を次のコードに単純化しました。

from django.db import models


class Category(models.Model):
    name = models.CharField(max_length=100)


class Project(models.Model):
    categories = models.ManyToManyField(Category, related_name='projects')    


category_list = Category.objects.prefetch_related('projects')


print category_list # [<Category: Category object>, <Category: Category object>]
print category_list[0] in category_list # False
print category_list[0] in category_list # True

「prefetch_related」を削除して代わりに「all」を使用すると、問題はなくなりますが、これによりさらに多くの DB 呼び出しが使用されます。

prefetch_related を使用して初めて正しい結果を得るにはどうすればよいですか?

4

1 に答える 1

0

ここのDjangoドキュメントでは、あなたが持っているのと同じコードを示していますが.all()、prefetch_relatedの前に.

おそらく、その Django がないと、クエリが面倒になるのではないでしょうか? 最初のスライス [0] まで待機し、それをクエリ (LIMIT 0) として解釈している可能性があると思いましたが、そこにすべてを表示する print ステートメントを説明していません。いずれにせよ、これはバグのように見えます。これが「予期される動作」であるとは想像できません。

in で試して.all()、出力を報告できますか?

于 2013-04-10T19:45:51.720 に答える