0

django プロジェクトで作業し、呼び出しを高速化しようとしています。Django は自動的に 2 番目のクエリを実行して、外部キーの関係を評価していることに気付きました。たとえば、私のモデルが次のように見える場合:

Model Person:
    name = model.CharField("blah")

Model Address:
    person = model.ForeignKey(Person)

それから私は作る:

p1 = Person("Bob")
address1 = Address(p1)
print (p1.id) #let it be 1 cause it is the first entry

それから私が電話したとき:

address1.objects.filter(person_id = "1")

私は得る:

クエリ #1: SELECT addressidaddress.person_idからaddress

クエリ #2: SELECT personidperson.nameからperson

2 番目の呼び出し、クエリ #2 を取り除きたい。django ドキュメントの「defer」を使用してみましたが、うまくいきませんでした (実際には、さらに多くの呼び出しが行われます)。「値」は可能性ですが、実際には、プルしたいフィールドがもっとたくさんあります。私がやりたいことは、FOREIGN KEYを評価しないことだけです。person_id を返してもらえれば幸いです。Django がすべての外部キーを評価するため、Address.objects.all() のようなコマンドを実行すると、特に実行時間が大幅に短縮されます。

4

1 に答える 1

0

同じ問題に関する他の質問を見たばかりですが__unicode__、ForeignKeyフィールドを参照するメソッドを定義したと思います。シェル内のいくつかのオブジェクトをクエリして出力すると、__unicode__メソッドが呼び出されます。これには、ForeignKeyを取得するためのクエリが必要です。解決策は、そのメソッドを書き直してその参照を必要としないようにするか、他の質問で述べたように、を使用することselect_related()です。

次回は、発生している問題を実際に示すコードを含む完全なコードを提供してください。

于 2013-03-18T21:28:13.953 に答える