to_python
メソッドを使用して解読されるさまざまなデータベースフィールドがあります。私が抱えている問題は、この特定のモデルの管理セクション(admin.ModelAdmin
リスト)にアクセスするたびに、ページには時間がかかります。私はリストページのフィールドを解読するためにto_python
メソッドを必要としません。これは、リストされているフィールドやカラムがまったく暗号化されていないためです。ユーザーが項目をクリックして編集すると、to_python
メソッドが起動しますが、これは意図した通りです。しかし、リストビューで暗号化されていないフィールドだけが表示されていることを念頭に置いて、リストア中にオブジェクトを復号化しようとすると、to_python
メソッドを停止するにはどうすればよいですか?また、これはフィルタが実際にゆっくりと動作する原因にもなります。ここでも、暗号化されていないフィールドでのみフィルタリングが行われるため、to_python
メソッドを実行する必要はありません。データがDBからロードされるたびにto_pythonが呼び出されます
答えて
したがって、少数のフィールドしか表示していなくても、管理者が各行のモデルインスタンス全体を読み込むという問題があります。解決策ではなく、デフォルトの管理者の標準get_query_set
方法を使用しての、それはあなたがしたいフィールドを取得するだけにonly
メソッドを使用するように、あなたのModelAdmin
サブクラスでqueryset
メソッドをオーバーライドする必要があります:
class MyModelAdmin(admin.ModelAdmin):
list_display = ('foo', 'bar')
def queryset(self, request):
qs = self.model._default_manager.only('foo', 'bar')
ordering = self.get_ordering(request)
if ordering:
qs = qs.order_by(*ordering)
return qs
(かdefer('my_expensive_field')
を使用できますが、これは同じものになります)。
それは素晴らしいです!ありがとうございました。 –
「self.model._default_manager.only」の構文はどこから来たのですか?私はそれをgoogledし、Djangoのドキュメントを検索し、私は "唯一の"への参照を見つけることができませんでしたが、私はこの暗い芸術を教えることについて知らない秘密のDjango社会ですか? :-) –
:-) '_default_manager'は私が知る限りは文書化されていませんが、' only'は標準的なクエリーセットメソッドです:https://docs.djangoproject.com/en/1.3/ref/models/querysets/#を参照してください。ただ –
- 1. Djangoのカスタムモデルフィールド:to_python()が呼び出されていません
- 2. C#フォームがロードされるたびに呼び出す関数
- 3. 呼び出されたフォームが閉じられたときに新しいデータを呼び出しフォームにロード
- 4. iframeのイベントハンドラが呼び出されずにロードされる
- 5. textFieldShouldBeginEditingが呼び出され、textFieldDidBeginEditingが呼び出されない
- 6. Python:setterが呼び出されたら関数を呼び出しますか?
- 7. 呼び出されるたびにPHP関数が実行されますか?
- 8. フォームが送信されるたびにDOMContentLoadedが呼び出されます
- 9. creatorで呼び出されたメソッドは、基底クラスから呼び出されますが、派生クラスからは呼び出されません
- 10. onPressがロード時に呼び出されました
- 11. アプリケーションがバックグラウンドから呼び出されたときにメソッドを呼び出す
- 12. nsinvocationが呼び出されますか?
- 13. ダイアログに呼び出されたデータ
- 14. ユニットテストデリゲートアクションが呼び出されました
- 15. オブジェクトが呼び出されました
- 16. カスタムボタンから呼び出されるクライアントスクリプトにモジュールをロードする
- 17. どのオーバーロードされたメソッドが呼び出されますか?
- 18. sprintfが呼び出されるたびにmy_functionを呼び出す方法は?
- 19. onDestroyは、画面が表示されるたびに呼び出されます。
- 20. ロードされたページからjsページを呼び出す
- 21. リモートファイルからロードされたJavaScript関数を呼び出す
- 22. ドキュメントがロードされた後に呼び出されるイベントの取得
- 23. コントローラが呼び出された後にhtml.erbファイルが呼び出されるのはなぜですか?
- 24. 最初に 'invalidate'が呼び出されたときに 'onDraw()'が2回呼び出されました
- 25. キャッシュからロードする場合でもWebview onReceivedErrorが呼び出されます
- 26. アトミックブロックから "select_for_update"がまだ呼び出されましたTransactionManagementError
- 27. ヘッドレスクロム - ロードされたWebページからのコールバックの呼び出し
- 28. Xamarin iOS:バックグラウンドフェッチで呼び出された有効期限切れのハンドラが呼び出されたときに最後に呼び出されます
- 29. dlopenされたライブラリからdlopen()が呼び出された場合、ロード・リークはありますか?
- 30. onReceiveが呼び出されないときに呼び出される
ModelAdminのQuerysetメソッドをオーバーライドして、暗号化されたフィールドの読み込みを遅延させたい場合があります。しかし、それについては完全にはわかりませんが、あなたがそれが好きなら、それがどうなるか教えてください。 –