Как использовать Django-autocomplete-light для внешнего ключа в админке

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

Итак, у меня есть моя модель, и как я могу добавить автозаполнение для полей fk.

Class Order(models.Models)
   Client = models.ForeignKey(settings.AUTH_USER_MODEL)

person Goun2    schedule 03.02.2017    source источник


Ответы (1)


Вы должны взглянуть на документацию и попытаться прочитать это медленно. Если вы дадите более подробную информацию о том, что у вас не работает, возможно, мы могли бы помочь лучше. В общем вот что нужно:

В файле 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/заказы/клиент-автозаполнение/

Вид в браузере

Я полагаю, что вы знакомы с формами в 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
comment
Я думаю, что вопрос связан с администратором django - person Nabin; 05.07.2020