Python 如何在管理中使用Django autocomplete指示灯作为外键

Python 如何在管理中使用Django autocomplete指示灯作为外键,python,django,django-admin,django-autocomplete-light,Python,Django,Django Admin,Django Autocomplete Light,我一直在努力向django admin fk字段添加自动完成,我遇到了第三方应用程序django autocomplete light,但它的文档对于像我这样的初学者来说非常混乱 所以,我有我的模型,我如何才能添加一个fk字段的自动完成 Class Order(models.Models) Client = models.ForeignKey(settings.AUTH_USER_MODEL) 你应该看看这本书,试着慢慢读。如果你能提供更多的细节,关于什么对你不起作用,也许我们能帮助你更

我一直在努力向django admin fk字段添加自动完成,我遇到了第三方应用程序django autocomplete light,但它的文档对于像我这样的初学者来说非常混乱

所以,我有我的模型,我如何才能添加一个fk字段的自动完成

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

你应该看看这本书,试着慢慢读。如果你能提供更多的细节,关于什么对你不起作用,也许我们能帮助你更好。一般来说,这是需要的:

在您的视图.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
然后在url.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 %}
{%extends'base.html%}
{别忘了那个!}
{%load static%}
{%block content%}
{%csrf_令牌%}
{{form.as_p}}
{%endblock%}
{%block footer%}
{{form.media}
{%endblock%}

我认为这个问题与django admin有关