設定
次のような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)
CoreData
Django の管理インターフェイスでは、これによりとの概要で意図した並べ替えが行われます。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 構造は影響を受けません。そこでは何も変わりませんでした。 ordered
2 つのメカニズムがどのように相互運用されるかについてのドキュメントはありますか? これまでのところ、それを発見していません。- これについて他にどのような経験がありますか、または単に
ModelForm
「ModelChoiceField」とqueryset
アプローチを使用しているだけですか?