3

私はDjangoモデルに言ってもらいます、

class Student(models.Model):
    prefix           = models.CharField(max_length = 10, blank = True, null = True,)
    suffix           = models.CharField(max_length = 10, blank = True, null = True,)
    fullname         = models.CharField(max_length = 100, null = False,)
    fname            = models.CharField(max_length = 100, verbose_name = u'First Name', blank = True, null = True,)
    midname          = models.CharField(max_length = 100, verbose_name = u'Middle Name', blank = True, null = True,)
    lname            = models.CharField(max_length = 50, verbose_name = u'Last Name', default = ' ')
    department       = models.ForeignKey('Department')

リスト表示(admin.py)

    list_display = ('fname', 'midname', 'lname', 'prefix', 'suffix',)

このためには、上記のフィールドを含む単純なselectクエリで十分ですが、Djangoは、FKがある場合、内部結合を使用して複雑な方法でSQLクエリを作成します。例えば、

通常、djangoは実装する必要があります

     SELECT 'fname', 'midname', 'lname', 'prefix', 'suffix' FROM student LIMIT 0,100;

ただし、Djangoはすべての可能なフィールドに対してSELECTクエリを実行します。

SELECT student.prefix.student.suffix .... deparment.id ,depatment.name ..... 
INNER JOIN department ON deparment.id = student.id ........ LIMIT 100

不必要なクエリが必要な理由について誰かが合理的な説明をすることができますか?

4

2 に答える 2

2

Djangoは、開発者がどのフィールドを選択するかを予測しません。したがって、関連するすべてのテーブルのフィールドを含むすべてのフィールドを管理者テンプレートに渡します。開発者は、必要に応じて管理者テンプレートを上書きできます。queryset()は、カスタムSQLステートメントを送信する機能を提供します。

質問が答えられることを願っています。

于 2012-12-05T04:54:05.183 に答える
0

ホーマイバッド!私はlist_filter=['department__name']を使用していました

それが部門との内部結合であるように。今すぐ削除して、最適化されたクエリを表示します

DJANGO ROCKS

于 2012-12-05T06:06:41.460 に答える