3

設定

次のような2つのDjango(1.4.2)モデルがありました:

class CoreData(models.Model):
   cdid = models.AutoField(primary_key=True,editable=False)
   name = models.CharField(max_length=100,db_index=True,unique=True)
   # etc

class DetailData(models.Model):
    cdid = models.OneToOneField(CoreData,primary_key=True)
    detl = models.CharField(max_length=100)
    # etc

そして、次の管理者定義:

class CoreDataAdmin(admin.ModelAdmin):
    ordering = ['name']
    readonly_fields = ('etc', )
admin.site.register(CoreData, CoreDataAdmin)

class DetailDataAdmin(admin.ModelAdmin):
    ordering = ['cdid__name']
    readonly_fields = ('etc', )
admin.site.register(DetailData, DetailDataAdmin)

CoreDataDjango の管理インターフェイスでは、これによりとの概要で意図した並べ替えが行われます。DetailDataつまり、両方のリストがフィールドの昇順で並べ替えられCoreData nameます。

ただし、ソートされていないDetailDataのは、エントリ ページのプルダウン リストです。昇順で記載していcdidます。

これを変えたいと思う日が来ます。

この簡略化された図の範囲外の理由で、モデルを次のように拡張しました。

class CoreData(models.Model):
    cdid = models.AutoField(primary_key=True,editable=False)
    name = models.CharField(max_length=100,db_index=True,unique=True)
    # etc
    class Meta:
        ordering = ['name']

class DetailData(models.Model):
    cdid = models.OneToOneField(CoreData,primary_key=True)
    detl = models.CharField(max_length=100)
    # etc
    class Meta:
        ordering = ['cdid__name']

そしてordering、最初のテストのために、管理者定義に をそのまま残したと思います。

観察

私が行った変更により、Django テスト サーバーでの処理時間が (桁違いに) 増加しました。商品概要ページも同様です。変更前の遅延がほとんどなかった壊れたパイプ (ブラウザの再試行による) を見たことさえあります。すべての CPU コアは影響を受けません。おそらく、データベース要求が劇的に増加したために速度低下が発生したと考えられます。(ここでは何万もの DB レコードについて話しているわけではありません。さらに、影響を受ける管理項目の概要ページには、限られた数の項目が表示されます。)

これまでのところ、とても良いです。その効果を元に戻すことができれば. しかし、元の定義に戻しても状況は改善されません。

質問

  • テスト サーバーの「古い」パフォーマンスを取り戻すにはどうすればよいですか? どこをクリーンアップする必要がありますか? manage.py私は元の定義に戻って、いくつかのコマンドを試してみました (あまり希望はありませんが、誰にもわかりません) 。DB 構造は影響を受けません。そこでは何も変わりませんでした。
  • ordered2 つのメカニズムがどのように相互運用されるかについてのドキュメントはありますか? これまでのところ、それを発見していません。
  • これについて他にどのような経験がありますか、または単にModelForm「ModelChoiceField」とquerysetアプローチを使用しているだけですか?
4

0 に答える 0