- en
- Language: ru
- Documentation version: 7.4.2
Установка¶
Установка django-select2
python3 -m pip install django-select2
Добавьте django_select2
в INSTALLED_APPS
в настройках вашего проекта.
Добавьте django_select
к вашей корневой конфигурации URL:
from django.urls import include, path
urlpatterns = [
# … other patterns
path("select2/", include("django_select2.urls")),
# … other patterns
]
Наконец, убедитесь, что у вас есть постоянная настройка кеша (НЕ DummyCache
или LocMemCache
), в этом примере мы будем использовать Redis. Убедитесь, что у вас есть сервер Redis и он работает:
# Debian
sudo apt-get install redis-server
# macOS
brew install redis
# install Redis python client
python3 -m pip install django-redis
Затем добавьте конфигурацию кеша в ваш файл settings.py
следующим образом:
CACHES = {
# … default cache config and others
"select2": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/2",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
# Tell select2 which cache configuration to use:
SELECT2_CACHE_BACKEND = "select2"
Внешние зависимости¶
jQuery не включен в пакет, так как ожидается, что в большинстве сценариев он уже будет доступен.
Быстрый старт¶
Вот быстрый пример для начала:
Сначала убедитесь, что вы следовали инструкциям по установке выше. Как только все настроено, давайте начнем с простого примера.
У нас есть следующая модель:
# models.py
from django.conf import settings
from django.db import models
class Book(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
co_authors = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='co_authored_by')
Далее мы создаем модель формы с пользовательскими виджетами Select2.
# forms.py
from django import forms
from django_select2 import forms as s2forms
from . import models
class AuthorWidget(s2forms.ModelSelect2Widget):
search_fields = [
"username__icontains",
"email__icontains",
]
class CoAuthorsWidget(s2forms.ModelSelect2MultipleWidget):
search_fields = [
"username__icontains",
"email__icontains",
]
class BookForm(forms.ModelForm):
class Meta:
model = models.Book
fields = "__all__"
widgets = {
"author": AuthorWidget,
"co_authors": CoAuthorsWidget,
}
Простой рендеринг на основе классов сделает вашу форму:
# views.py
from django.views import generic
from . import forms, models
class BookCreateView(generic.CreateView):
model = models.Book
form_class = forms.BookForm
success_url = "/"
Обязательно добавьте представление в ваш urls.py
:
# urls.py
from django.urls import include, path
from . import views
urlpatterns = [
# … other patterns
path("select2/", include("django_select2.urls")),
# … other patterns
path("book/create", views.BookCreateView.as_view(), name="book-create"),
]
Наконец, нам нужен небольшой шаблон, myapp/templates/myapp/book_form.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Create Book</title>
{{ form.media.css }}
<style>
input, select {width: 100%}
</style>
</head>
<body>
<h1>Create a new Book</h1>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
{{ form.media.js }}
</body>
</html>
Готово - наслаждайтесь чудесами Select2!
Изменения¶
Смотрите в релизах на Github.
Все содержание¶
Содержание: