У меня есть разные поля базы данных, которые дешифруются с помощью метода to_python
. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я обращаюсь к разделу администрирования (admin.ModelAdmin
) для этой конкретной модели, страница требует времени для загрузки. Мне не нужен метод to_python
для дешифрования полей на странице списка, так как поля или столбцы, которые я перечисляю, вообще не зашифрованы. Когда пользователь нажимает на элемент для его редактирования, применяется метод to_python
, который в порядке, точно так, как предполагалось. Тем не менее, как я могу остановить метод to_python
, пытающийся дешифровать объекты при их перечислении, учитывая, что в представлении списка отображаются только поля, которые не зашифрованы? Кроме того, это заставляет фильтр работать очень медленно. Опять же, фильтрация выполняется только в незашифрованных полях, поэтому не должно быть необходимости для метода to_python
.to_python вызывается каждый раз, когда данные загружаются из базы данных
ответ
Так что проблема заключается в том, что администратор загрузит весь экземпляр модели для каждой строки, даже если вы показываете только несколько полей. Решение должно быть переопределить метод queryset
в вашем ModelAdmin
подкласса так, что вместо того, чтобы использовать стандартный get_query_set
метод менеджера по умолчанию, он использует метод only
только получить необходимые поля:
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»? Я искал его и искал документы Django, и мне не удалось найти ссылку на «.only», есть ли секретное общество Django, о котором я не знаю, учит этому темному искусству? :-) –
:-) '_default_manager' недокументирован, насколько я знаю, но' only' является стандартным методом набора запросов: см. Https://docs.djangoproject.com/en/1.3/ref/models/querysets/# только –
- 1. предотвратить данные загружаются каждый раз в DialogFragment
- 2. Как получить данные из базы данных вместо JSON каждый раз
- 3. увеличить значение переменной каждый раз, когда он вызывается из контроллера
- 4. Как обрезать отдельные пользовательские данные из базы данных каждый раз, когда пользователь выходит из системы out.in?
- 5. Когда from_db_value вызывается в Django 1.8?
- 6. IAuthorizationFilter не вызывается каждый раз
- 7. Почему обновление базы данных каждый раз, когда я обновляю браузер?
- 8. Как отслеживать функцию только один раз, когда данные загружаются
- 9. SQLiteOpenHelper onCreate вызывается каждый раз
- 10. Как вставить кусок кода каждый раз, когда мои циклы извлекают некоторые данные из моей базы данных
- 11. Данные из базы данных отображаются несколько раз
- 12. Метод не вызывается каждый раз
- 13. drawRect не вызывается каждый раз
- 14. базы данных Sqlite3 удален каждый раз, когда я перезапустить программу
- 15. Статические поля называются/загружаются каждый раз, когда они используются?
- 16. LLDB: печатать переменные, переданные функции каждый раз, когда он вызывается?
- 17. CXCallObserver запускает метод делегата каждый раз, когда вызывается applicationDidBecomeActive?
- 18. ReactFire не загружаются данные из базы данных в реальном времени
- 19. Изображения и кнопки не загружаются каждый раз
- 20. loadView вызывается каждый раз, когда используется нотация .view
- 21. CGlib-wired bean воссоздается каждый раз, когда вызывается его метод.
- 22. Заставка появляется каждый раз, когда вызывается окно запуска проекта.
- 23. CustomAdapter getView() вызывается каждый раз при прокрутке
- 24. viewControllerBeforeViewController не вызывается каждый раз в UIPageViewController
- 25. метода IOS canAuthenticateAgainstProtectionSpace не вызывается каждый раз, когда
- 26. Как вызвать метод каждый раз, когда вызывается переменная
- 27. Вызов макроса каждый раз, когда вызывается любой метод - Objective C
- 28. Как переписать первую строку каждый раз, когда вызывается метод .write()?
- 29. paintComponent не вызывается каждый раз, когда я хочу его
- 30. Инкремент рассчитывается каждый раз, когда файл вызывается в PHP
Возможно, вам стоит попробовать переопределить метод Queryset ModelAdmin, чтобы он задерживал загрузку зашифрованного поля. Не совсем уверен в этом, но расскажи мне, как это происходит, если тебе так хочется. –