Плагин автозаполнения jQuery с использованием базы данных/модели Django

Кто-нибудь знает, как реализовать плагин автозаполнения jQuery в Django, используя базы данных вместо локальных значений?

В частности, я хочу реализовать функцию «Замена страницы поиска», упомянутую внизу страницы, набор данных будет примерно из тысячи или более записей, но я не могу понять, как заставить его взаимодействовать с необходимыми полями моей базы данных.

(Я также ищу хорошее решение для поиска Python/Django, которое можно было бы использовать для моего сайта, а это всего лишь очень простой веб-сайт.)


Спасибо за помощь.


person Jon Cox    schedule 12.02.2011    source источник


Ответы (1)


Недавно я что-то сделал с jQuery.autocomplete с одной моделью.

функциональность поиска города, когда пользователь начинает писать название:

в соответствии с документами jqueryui, чтобы заставить работать автозаполнение, вам нужен такой ввод:

<input id="n" type="text" name="n"/>

Итак, javascript в моем шаблоне для подключения библиотеки к этому входу выглядит так:

$(document).ready(function(){
     $( "input#n" ).autocomplete({
                            source: "{% url autocomplete_city %}",
                            minLength: 2
        });
});

чтобы разрешить этот URL-адрес, вы должны написать что-то подобное в своем urls.py

urlpatterns = patterns('cities.views',
    url(r'^autocomplete_city/$', 'autocomplete_city', name='autocomplete_city'),
)

это означает, что у меня есть что-то вроде представления city.views.autocomplete_city:

def autocomplete_city(request):
    term = request.GET.get('term') #jquery-ui.autocomplete parameter
    cities = City.objects.filter(name__istartswith=term) #lookup for a city
    res = []
    for c in cities:
         #make dict with the metadatas that jquery-ui.autocomple needs (the documentation is your friend)
         dict = {'id':c.id, 'label':c.__unicode__(), 'value':c.__unicode__()}
         res.append(dict)
    return HttpResponse(simplejson.dumps(res))

что тебе еще нужно? начните тестирование и помните, что ДОКУМЕНТАЦИЯ — ВАШ ДРУГ ПОПРОБУЙТЕ сначала сделать что-то для себя, погуглите, прочитайте документацию, попробуйте 3 раза, если не получается, stackoverflow — ваш друг.

person panchicore    schedule 12.02.2011
comment
Это для автозаполнения jqueryUI, а не для плагина, на который он ссылается, но, тем не менее, хороший пост. Я бы порекомендовал ему также использовать jquery UI! Джонатан, если вы хотите использовать этот плагин, единственные изменения, которые вам нужно внести, это то, что параметр GET равен 'q', и результатом должны быть пары ключ-значение открытого текста, разделенные |, причем каждая пара находится в одной строке. - person Yuji 'Tomita' Tomita; 13.02.2011
comment
Спасибо за Ваш ответ. Я пытался использовать Jquery, но в настоящее время я действительно изо всех сил пытаюсь заставить его правильно использовать удаленный источник. Я могу заставить его использовать локальные данные, но когда я меняю источник на URL-адрес (представления), он никогда не обращается к этому представлению. Можете ли вы придумать какую-либо причину для этого? - person Jon Cox; 16.02.2011
comment
Сделал отдельный вопрос по проблеме, о которой я упоминал выше: stackoverflow.com/questions/5020844/ - person Jon Cox; 16.02.2011
comment
Я вижу, что в словаре есть такие ключи, как id, label, value. Как сказать, вывести на консоль идентификатор, соответствующий идентификатору базы данных выбранного элемента? Это важно, потому что я использую идентификатор для фильтрации других запросов. Я пробовал console.log($("#myinput").id), но это не помогло. Спасибо. - person Shailen; 13.09.2013
comment
Следующий вопрос SO ответил на мой вопрос выше: stackoverflow.com/questions/4895748/ - person Shailen; 13.09.2013