РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
524 of 818 menu

Исключение DisallowedModelAdminLookup

Исключение DisallowedModelAdminLookup относится к модулю django.contrib.admin и возникает, когда в административной панели предпринимается попытка выполнить фильтрацию или поиск с использованием поля модели, которое не было явно разрешено в настройках ModelAdmin. Это исключение является подклассом ValueError и служит для предотвращения несанкционированного доступа к данным через параметры GET запроса.

Синтаксис

raise DisallowedModelAdminLookup(message)

Исключение принимает один параметр - строку с описанием ошибки, которая указывает на запрещенное поле или оператор фильтрации.

Пример . Возникновение исключения

Рассмотрим ситуацию, когда в административной панели выполняется запрос с параметром фильтрации по полю, которое не указано в list_filter:

from django.contrib import admin from myapp.models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'status', 'created_at'] list_filter = ['status']

При попытке перейти по URL с параметром ?created_at__gte=2025-01-01 возникнет исключение:

"DisallowedModelAdminLookup: Field 'created_at' does not exist in list_filter or search_fields"

Пример . Корректное использование

Чтобы избежать исключения, необходимо добавить разрешенные поля в list_filter или search_fields:

from django.contrib import admin from myapp.models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'status', 'created_at'] list_filter = ['status', 'created_at'] search_fields = ['title', 'content']

Теперь запрос с параметром ?created_at__gte=2025-01-01 будет обработан без ошибки:

"Request processed successfully"

Пример . Обработка исключения

При необходимости можно переопределить метод get_queryset в ModelAdmin для кастомной обработки запросов:

from django.contrib import admin from django.core.exceptions import ValidationError from myapp.models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'status', 'created_at'] list_filter = ['status'] def get_queryset(self, request): qs = super().get_queryset(request) try: if 'created_at__gte' in request.GET: return qs.filter(created_at__gte=request.GET['created_at__gte']) return qs except (ValueError, ValidationError): return qs

В этом примере мы перехватываем ошибки валидации и возвращаем исходный QuerySet, предотвращая возникновение исключения.

Смотрите также

  • исключение DisallowedModelAdminToField,
    возникающее при обращении к запрещенному полю в параметрах to_field
  • исключение ImproperlyConfigured,
    возникающее при неправильной конфигурации приложения Django
  • исключение FieldError,
    возникающее при ошибках в именах полей модели
  • исключение RestrictedError,
    возникающее при попытке удаления объекта с ограничениями
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить