Бывают моменты (очень часто), когда в своих проектах мы используем поля с автозаполнением, на протяжение длительного времени используем для этого два приложения.

 

 

Последнее время эта функция на сайтах набирает популярность и естесственно все заказчики хоят себе такую штуку на сайт, да и что греха таить, она очень удобна. Самый простой способ понять зачем она нам нужна это представить список городов имеющийся в базе данных (он может быть гиганским) и объекты, которые по ключу связаны с этими городами.

 

 

Например, у нас есть две модели:

 

 

class City(models.Model):

 

 

title = models.CharField(max_length=200)

 

 

и класс школа:

 

 

class School(models.Model):
     title = models.CharField(max_length=200)
     city = models.ForeignKey(City)

 

 

Мы обычно используем django-autocomplete-light, чтоьы красиво вывести строку выбора города как в админке, так и в фронте. Представьте ситуацию, когда у вас 1000 городов, как это будет выглядеть в админке и при добавлении школы пользователем на сайте.

 

 

Используя это django-autocomplete-light этого можно избежать. И так, чтобы применить на сайте всю эту красоту нужно во первых сделать:

 

 

pip install django-autocomplete-light

 

 

Затем добавить его в setting.py в секцию INSTALLED_APPS:

 

 

'dal', 'dal_select2',

 

 

 Обязательно перед 'django.contrib.admin'.

 

 

Создадим свою вьюху:

 

 

from dal import autocomplete 
from your_app.models import City
class CityAutocomplete(autocomplete.Select2QuerySetView):
     def get_queryset(self):
         if not self.request.user.is_authenticated(): 
               return City.objects.none() 
         qs = City.objects.all() 
         if self.q: 
               qs = qs.filter(title__istartswith=self.q) 
        return qs

 

 


 

 

 

 

 

 

 

 

В urls.py добавим:

 

 

from your_app.views import CityAutocomplete

 

urlpatterns = [
url(
r'^city-autocomplete/$',
CityAutocomplete.as_view(),
name='city-autocomplete',
),
]

 

 

 

 

 

 

Ну и для того, чтобы это все отображалось в админке, добавим в admin.py:

 

 

from dal import autocomplete

 

from django import forms

 

 

class SchoolAdmin(admin.ModelAdmin):
         model = School
         class form(forms.ModelForm):
         class Meta:
         widgets = {
                'city': autocomplete.ModelSelect2(url='city-autocomplete')
         }

 

 

admin.site.register(School, SchoolAdmin)

 

 

Вот так легко добавляется эта красота. Теперь в админке при добавлении или редактировании объекта в поле city будет автозаполнение при вводе названия города.

 

 

Если нужно засунуть автозаполнение в Django на фронт, то делаем это так:

 

 

{% extends 'base.html' %}
{% load static %}

 

{% block content %}
<div>
<form action="" method="post">
{% csrf_token %}
{{ form}}
<input type="submit" />
</form>
</div>
{% endblock %}

{% block footer %}
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script>

{{ form.media }}
{% endblock %}

 

 

Обратите внимание на обязательные атрибуты, это {{form.media}} и 'admin/js/vendor/jquery/jquery.js. Именно втаком порядке они должны следовать.

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
Адрес веб студии
Позвонить

Городской: +7(8793)33-16-17
Мобильный: +7(928)911-74-69

email веб студии
Написать

manager@kmv-it.ru

Доехать до веб студии
Приехать

г.Пятигорск переулок Первомайский 18

Логотип Кухня сайтов