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

Атрибут autocomplete_fields

Атрибут autocomplete_fields применяется к классу ModelAdmin и позволяет заменить стандартный выпадающий список (select) на поле с автодополнением для полей типа ForeignKey и ManyToManyField. Вместо отображения всех связанных объектов в выпадающем списке, пользователь вводит текст, а система подгружает подходящие варианты через AJAX-запросы. Это значительно ускоряет работу с большими таблицами.

Для использования атрибута необходимо указать список имен полей, для которых нужно включить автодополнение. Также требуется, чтобы в модели, на которую ссылается внешний ключ, было указано поле ModelAdmin/attribute/search_fields/">search_fields в соответствующем классе ModelAdmin. Это поле определяет, по каким полям будет выполняться поиск.

Синтаксис

from django.contrib import admin from myapp.models import Article, Author class ArticleAdmin(admin.ModelAdmin): autocomplete_fields = ['author', 'categories']

Пример . Для ForeignKey

Рассмотрим модели Article и Author. В статье есть внешний ключ на автора. В админке мы хотим выбирать автора через автодополнение:

from django.contrib import admin from myapp.models import Article, Author class AuthorAdmin(admin.ModelAdmin): search_fields = ['name', 'email'] class ArticleAdmin(admin.ModelAdmin): autocomplete_fields = ['author'] admin.site.register(Author, AuthorAdmin) admin.site.register(Article, ArticleAdmin)

Теперь при добавлении или редактировании статьи в поле выбора автора появится строка поиска. При вводе текста будут подгружаться авторы, у которых имя или email содержат введенную подстроку.

Пример . Для ManyToManyField

Атрибут также работает с полями ManyToManyField. Добавим в статью теги, которые будут выбираться через автодополнение:

from django.contrib import admin from myapp.models import Article, Tag class TagAdmin(admin.ModelAdmin): search_fields = ['name', 'slug'] class ArticleAdmin(admin.ModelAdmin): autocomplete_fields = ['tags'] admin.site.register(Tag, TagAdmin) admin.site.register(Article, ArticleAdmin)

Теперь в поле выбора тегов можно искать по названию или слаг-адресу. При этом можно выбрать несколько тегов, каждый из них будет добавлен через автодополнение.

Настройка поиска в связанной модели

Для корректной работы autocomplete_fields необходимо, чтобы у модели, на которую ссылается внешний ключ, был зарегистрирован класс ModelAdmin с атрибутом search_fields. Если этого не сделать, автодополнение не будет работать или будет работать некорректно:

from django.contrib import admin from myapp.models import Category, Article # Обязательно нужно указать search_fields для Category class CategoryAdmin(admin.ModelAdmin): search_fields = ['name', 'description'] class ArticleAdmin(admin.ModelAdmin): autocomplete_fields = ['category'] admin.site.register(Category, CategoryAdmin) admin.site.register(Article, ArticleAdmin)

Пример . С несколькими полями

В одном классе ModelAdmin можно указать несколько полей для автодополнения одновременно. Например, в статье есть автор и категория, оба поля будут использовать автодополнение:

from django.contrib import admin from myapp.models import Article, Author, Category class AuthorAdmin(admin.ModelAdmin): search_fields = ['name'] class CategoryAdmin(admin.ModelAdmin): search_fields = ['name'] class ArticleAdmin(admin.ModelAdmin): autocomplete_fields = ['author', 'category'] admin.site.register(Author, AuthorAdmin) admin.site.register(Category, CategoryAdmin) admin.site.register(Article, ArticleAdmin)

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

  • атрибут search_fields,
    который определяет поля для поиска в админке
  • атрибут raw_id_fields,
    который отображает поле ввода ID вместо выпадающего списка
  • атрибут list_display,
    который управляет отображением полей в списке объектов
  • атрибут list_filter,
    который добавляет фильтры в боковую панель админки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить