我一直在努力向django admin fk字段添加自動完成功能,我遇到了第三方應用程序Django-autocomplete-light,但它的對於像我這樣的初學者來說,文檔非常混亂。如何使用Django自動完成燈管理外部鍵
所以,我有我的模型,我怎樣才能爲fk字段添加自動完成功能。
Class Order(models.Models)
Client = models.ForeignKey(settings.AUTH_USER_MODEL)
我一直在努力向django admin fk字段添加自動完成功能,我遇到了第三方應用程序Django-autocomplete-light,但它的對於像我這樣的初學者來說,文檔非常混亂。如何使用Django自動完成燈管理外部鍵
所以,我有我的模型,我怎樣才能爲fk字段添加自動完成功能。
Class Order(models.Models)
Client = models.ForeignKey(settings.AUTH_USER_MODEL)
你應該看看documentation並嘗試慢慢閱讀它。如果你提供更多細節,關於什麼不適合你,也許我們可以幫助更好。在一般情況下,這是需要什麼:
在你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',
),
]
讓我們跳過如果它讓你感到困惑,那麼第二部分是來自文檔的shell。所以現在你應該可以從你的瀏覽器去這個地址。
本地主機:8000 /客戶端自動完成/
你應該能夠看到所有的用戶以文本形式存在(這種格式被稱爲JSON,你可以看看它,如果你想,但我們不會處理它)。 如果您已經創建了訂單另一個應用程序,而你在另一個文件夾中工作,只是嘗試調用URL以訂單爲前綴改爲:
本地主機:8000 /訂單/客戶端自動完成/
我想,你所熟悉的在Django的形式,如果沒有take a look here.在你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 %}