Вы должны взглянуть на документацию и попытаться прочитать это медленно. Если вы дадите более подробную информацию о том, что у вас не работает, возможно, мы могли бы помочь лучше. В общем вот что нужно:
В файле views.py добавьте
from django.contrib.auth.models import User
from dal import autocomplete
from your_countries_app.models import Country
class ClientAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
if not self.request.user.is_authenticated():
return User.objects.none()
qs = User.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
Затем в файле urls.py добавьте:
from your_countries_app.views import ClientAutocomplete
urlpatterns = [
url(
r'^client-autocomplete/$',
ClientAutocomplete.as_view(),
name='client-autocomplete',
),
]
Пропустим на секунду часть с оболочкой из документации, если она вас смущает. Итак, теперь вы сможете перейти по этому адресу из своего браузера.
локальный: 8000/клиент-автозаполнение/
Там вы должны увидеть всех пользователей в текстовом виде (этот формат называется JSON, вы можете посмотреть его, если хотите, но мы этим заниматься не будем). Если вы создали другое приложение для заказов и работаете в другой папке, просто попробуйте вместо префикса вызвать URL с заказами:
локальный: 8000/заказы/клиент-автозаполнение/
![Вид в браузере](https://i.stack.imgur.com/rR7w9.png)
Я полагаю, что вы знакомы с формами в Django, если нет, посмотрите здесь. В файле forms.py добавьте следующее:
from dal import autocomplete
from django.contrib.auth.models import
from django import forms
class OrderForm(forms.ModelForm):
client = forms.ModelChoiceField(
queryset=User.objects.all(),
widget=autocomplete.ModelSelect2(url='cllient-autocomplete')
# if you are working in an orders application, and you have defined the the url
#in the orders/urls.py then call this method like this:
#widget=autocomplete.ModelSelect2(url='orders:cllient-autocomplete')
)
class Meta:
model = Order
fields = ('__all__')
Я полагаю, вы хотите, чтобы автозаполнение работало за пределами представлений панели администратора, поэтому вам нужно добавить в свой шаблон для представления заказов код ниже. Обратите внимание, что в файле base.html должны быть определены {% block content %} и {% block footer %}:
{% extends 'base.html' %}
{# Don't forget that one ! #}
{% load static %}
{% block content %}
<div>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" />
</form>
</div>
{% endblock %}
{% block footer %}
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script>
{{ form.media }}
{% endblock %}
person
palamunder
schedule
05.02.2017