0

ModelこのQuerySet(モデルに12フィールドがあるとしましょう):

objects = Model.objects.filter(...)

そしてこのテンプレート:

{% for object in object %}
<a href='{{ object.get_absolut_url }}'>Foo: {{ object.bar }}</a>
{% endfor %}

不要なフィールド(12フィールド+リレーションごと)を取得するSQLクエリを実行します。Djangoに「bar」フィールドのみを取得させたい。これどうやってするの?

ちなみにvalues()メソッドについては知っていますが、dictが返されるため、Modelなどのメソッドを呼び出すことはできませんget_absolute_url()

4

1 に答える 1

1

only()を使用したい:

オブジェクト=Model.objects.select_related()。only( "bar")。filter(...)

ただし、データの制限が多すぎてオブジェクトを他の方法で使用すると、実際にORMに追加のクエリを実行させる可能性があることに注意してください。そのため、django-debug-toolbarなどを使用してください。これらの不要なフィールドを削除して、多くの不要なクエリのヒットのみを発生させることは、より悪い状況です。

参考までに、defer()を使用して、他の方向で考えたい場合は、ロードしたくないフィールドをリストすることもできます。

于 2012-07-08T13:07:50.540 に答える