Рубрики
Без рубрики

Внедрить автозаполнение в Джангу

Привет PALS, в этом блоге я собираюсь вести вас, чтобы реализовать автозаполнение в интерфейсе администратора Django … Помечено с Django, Ajax, WebDev, Python.

Привет PALS, в этом блоге я собираюсь вести вас, чтобы реализовать автозаполнение в интерфейсе администратора Django. Я выбрал интерфейс администратора, потому что он предоставляет Crud (Create-Read-Update-Deleteet) для определенных моделей из коробки.

Для реализации функции автоматической завершенности я собираюсь использовать django-ajax-selects в настоящее время поддерживается Crucialfelix Отказ

Настраивать

Давайте начнем с создания проекта Django. Прежде всего, я создаю виртуальную среду .venv Отказ Вы можете создавать виртуальную среду только python -m venv .venv . Давайте активируем виртуальную среду .venv \ scripts \ активировать Как я в настоящее время в среде Windows.

После этого установите Django и django-ajax-selects используя PIP.

pip install django django-ajax-selects

После установки библиотек давайте создадим проект Django с именем AutoComplete_demo_Project Отказ

django-admin startproject autocomplete_demo_project

Впоследствии давайте создадим приложение Django по имени блог .

python manage.py startapp blog

И зарегистрируйте приложение «Блог» и 'ajax_select' в Stall_apps внутри settings.py Отказ

# autocomplete_demo_project/settings.py
INSTALLED_APPS  = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'ajax_select', # new apps
    'blog.apps.BlogConfig',
]

После этого давайте определим URLConfs для ajax_select. Таким образом, он может загрузить необходимые Javascripts, таблицы стилей для автозаполнения.

# autocomplete_demo_project/urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from ajax_select import urls as ajax_select_urls

urlpatterns = [
    path('ajax_select/', include(ajax_select_urls)),
    path('admin/', admin.site.urls),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Модели и поиску

Мы должны начать через определение моделей, которые позже будут использоваться для наблюдения за автоматическим завершением на панели администратора. Не добавляя никакой сложности, я просто начну с одного поля Имя В блоге модели.

# blog/models.py
from django.db import models
from django.utils.translation import gettext_lazy as _

class Blog(models.Model):
    name = models.CharField(_("Blog"), max_length=50)

def  __str__(self):
    return  self.name

Давайте также создадим поиск для поля Имя Что извлекает наиболее подходящий результат, сопоставив запрос введенного при вводе записи на панели администратора. Для этого давайте создадим поиск для нашего поля имя ( namelookup ) в lookup.py внутри Блог каталог приложений.

# blog/lookups.py
from ajax_select import register, LookupChannel

from .models import Blog

@register('names')
class  NameLookup(LookupChannel):
    model = Blog

    def  get_query(self, q, request):
        return  self.model.objects.filter(name__icontains=q).order_by('name')[:50]

    def  format_item_display(self, item):
        return  u"%s"  % item.name

Здесь мы наблюдали два метода внутри нашего Namelookup сорт. Давайте копать в обоих из них:

  1. get_query Метод берет Q Параметр в качестве запроса, который будет использоваться для фильтрации записи в базе данных. Здесь мы использовали Имя__ icontains Подход, который будет фильтровать соответствующие записи в БД с дополнительной строкой q и вернуть фильтрованные записи. Мы также можем действовать с Название__startswith Подход, который пытается сопоставить только начальную строку с записями в БД с запросом Sub String Q и вернуть фильтрованные записи. Но давайте просто придерживаемся в одном подходе ( имя__ icontains подход) для реализации автоматического завершения.

  2. format_item_display Методы принимают каждые отфильтрованные записи и отображают blog.name (данные), которая является необходимостью в нашем случае с надлежащим стилем. Мы можем переопределить свойства отображения, чтобы она выглядела лучше и соответствовать нашим предпочтениям.

Также обратите внимание, что мы зарегистрировали имя поиска имена с Регистрация Декоратор, который позже будет использоваться с формой, чтобы соответствовать требованию с необходимой формой поля I.e. Поле формы с свойством имена будет соответствовать с вышеупомянутым поиску.

ModelAdmin и Forms

Последующий шаг будет создавать формы Django, которые будут предоставлены как свойство нашему ModelAdmin, которое мы позже создаем в admin.py Отказ

# blog/forms.py
from ajax_select.fields import AutoCompleteField
from django import forms

from .models import Blog

class  BlogForm(forms.ModelForm):

    name = AutoCompleteField('names')
    class  Meta:
        model = Blog
        fields = [
            'name'
        ]

Стоит отметить, что имя поля – это AutoCompletefield. С недвижимостью имен Что является названием поиска, которую мы зарегистрированы в Namelookup. класс внутри Блог/поиск. Отказ Это то, как мы промежуточные формы и поиска, используя django-ajax-selects.

После этого давайте создадим ModelAdmin. внутри admin.py Отказ

# blog/admin.py
from ajax_select.admin import AjaxSelectAdmin
from django.contrib import admin

from .forms import BlogForm
from .models import Blog

@admin.register(Blog)
class  BlogAdmin(AjaxSelectAdmin):

    form = BlogForm

То, что мы сделали здесь, переопределяют по умолчанию Форма Собственность предоставлена Django Admin и получите его заменить нашими Blogform Форма объекта.

Также обратите внимание, что использование Блогформ не ограничивается ModelAdmin для автоматического завершения. Это также может быть использовано в использованных определенных шаблонах, пройдя Форма внутри контекст Параметр из . Для этого,

{{ form.media }}
{{ form }}

Нам нужно загрузить ((form.media}} Для загрузки необходимых файлов JS и CSS, определенные ajax_selects приложение.

Наблюдение

После определения поиска, моделей, форм и ModelAdmin, теперь мы можем сделать миграцию и запустить файлы миграции. Python Manage.py Makemigrations Blog Опубликовать HOC, давайте запустим эти файлы миграции. Python Manage.py мигрировать Затем создайте суперпользователь для доступа к интерфейсу администратора, Python Manage.py CreatesuperUser

Затем войдите в 127.0.0.1:8000/ADMIN Чтобы получить доступ к интерфейсу Admin и перейдите к Блог модель.

Попробуйте добавить несколько записей, и вы заметите автоматическое завершение работы для вас.

Демонстрация

Я добавил несколько записей в моих моделях.

Давайте попробуем добавить еще одну запись, чтобы соблюдать автоматическое завершение. Обратите внимание, что когда я печатаю А , записи с буквой А В их имени появился выпадающий, поэтому пользователь может автозаполнять запись.

Спасибо за чтение.

Оригинал: “https://dev.to/thearjun/implement-autocomplete-in-django-3h20”