如何在Django Admin中实现在线搜索和智能提示
要在Django Admin中实现在线搜索和智能提示,需要进行以下几个步骤:
- 在需要进行搜索的模型中,定义搜索字段
例如,我们在一个名为“Product”的模型中需要进行搜索和提示,可以在模型中添加一个名为“name”的CharField,并加上“db_index=True”来进行优化:
class Product(models.Model): name = models.CharField(max_length=255, db_index=True)
- 创建Admin类并添加search_fields
在Admin类中添加“search_fields”属性,以指定需要搜索的字段。同时,也需要在Admin类中添加一个名为“autocomplete_fields”的属性,并将需要进行自动完成(即智能提示)的字段添加到其中。
class ProductAdmin(admin.ModelAdmin): search_fields = ('name',) autocomplete_fields = ('name',) admin.site.register(Product, ProductAdmin)
- 创建URL,并添加视图函数
在urls.py文件中添加一个URL,以作为自动完成(即智能提示)的请求地址。并在views.py文件中为该URL添加一个视图函数,使用“icontains”查询搜索结果。
from django.urls import path from .views import ProductAutocompleteView urlpatterns = [ path('product_autocomplete/', ProductAutocompleteView.as_view(), name='product_autocomplete'), ]
from django.db.models import Q from django.views import View from django.http import JsonResponse from .models import Product class ProductAutocompleteView(View): def get(self, request): query = request.GET.get('term', '') products = Product.objects.filter(Q(name__icontains=query)) results = [] for product in products: product_json = {} product_json['label'] = product.name product_json['value'] = product.name results.append(product_json) return JsonResponse(results, safe=False)
- 添加Javascript代码
在Admin页面上添加Javascript脚本,以绑定搜索框和自动完成(即智能提示)功能。其中,需要使用jQuery和jQuery UI组件库。
{% extends "admin/base.html" %} {% block extrahead %} <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css"> <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script> <script> $(function() { $("#id_name").autocomplete({ source: "{% url 'product_autocomplete' %}", minLength: 1 }); }); </script> {% endblock %} {% block content %} <div class="breadcrumbs"> <a href="{% url 'admin:index' %}">{{ site_header|escape }}</a> › <a href="{% url 'admin:app_list' app_label %}">{{ app_label|title }}</a> › {{ title|capfirst }} </div> <h1>{{ title|capfirst }}</h1> <div id="changelist-search"> <h2>{{ _('Search') }}</h2> <form method="get"> <input type="text" name="q" value="{{ search_term }}" autofocus id="searchbar" /> <input type="submit" value="{{ _('Search') }}" /> </form> </div> {% endblock %}
在上面的代码中,“{% extends "admin/base.html" %}”表示继承Admin默认模板。在“{% block extrahead %}”区域中,我们添加了jQuery和jQuery UI组件库的链接,并在脚本中绑定了自动完成(即智能提示)功能。在“{% block content %}”区域中,我们使用了一个名为“searchbar”的ID来标识搜索框的元素ID。
通过以上步骤,我们可以在Django Admin中实现在线搜索和智能提示功能,输入“pidancode.com”或“皮蛋编程”即可得到相关搜索结果。
相关文章