Django admin 实现search_fields精确查询实例

1. Django admin 简介

Django admin 是 Django 框架内置的一个强大的管理后台工具,可以帮助开发者快速构建和管理后台管理界面。它提供了一系列功能丰富的界面组件,如表格、表单、搜索框等,可以轻松地进行数据的增删改查操作。在实际使用中,我们经常需要对数据进行搜索操作,而 Django admin 提供了一个方便的属性 search_fields,用于配置模型在搜索框中可进行搜索的字段。

2. search_fields 的使用方法

在 Django admin 中,我们可以通过设置 search_fields 属性来指定搜索框中可进行搜索的字段。默认情况下,它是一个空列表。我们可以将需要进行搜索的字段名称按照字符串的形式添加到列表中。

2.1 简单搜索

首先,我们需要在 Django 的模型类中将 search_fields 属性设置为需要进行搜索的字段名。下面是一个示例:

from django.contrib import admin

class BookAdmin(admin.ModelAdmin):

search_fields = ['title', 'author']

在上述示例中,我们将 search_fields 设置为 ['title', 'author'],表示我们可以通过书名和作者进行搜索。

2.2 精确搜索

默认情况下,search_fields 属性是对字段进行模糊搜索,即会将搜索关键字在字段中进行匹配。但是有时候我们需要进行精确搜索,即完全匹配字段的内容。

为了实现精确搜索,我们可以使用 Django 的 search_lookups 属性,该属性用于指定搜索时使用的查询条件。默认情况下,它是一个空列表,表示使用模糊查询。

from django.contrib import admin

class BookAdmin(admin.ModelAdmin):

search_fields = ['title', 'author']

search_lookups = ['title__exact', 'author__exact']

在上述示例中,我们将 search_lookups 设置为 ['title__exact', 'author__exact'],表示对 title 和 author 字段进行精确搜索。

3. 实例:使用 search_fields 进行精确查询

假设我们有一个图书管理系统的后台管理界面,其中有一个 Book 模型类,包含了 title 和 author 两个字段。我们希望在后台管理界面中的搜索框中只能对 title 进行精确查询。

3.1 创建 Book 模型

from django.db import models

class Book(models.Model):

title = models.CharField(max_length=100)

author = models.CharField(max_length=100)

def __str__(self):

return self.title

在上述示例中,我们创建了一个 Book 模型,包含了 title 和 author 两个字段。

3.2 创建 BookAdmin 类

from django.contrib import admin

class BookAdmin(admin.ModelAdmin):

search_fields = ['title']

search_lookups = ['title__exact']

admin.site.register(Book, BookAdmin)

在上述示例中,我们创建了一个 BookAdmin 类,并将 Book 模型和 BookAdmin 类进行注册。我们将 search_fields 设置为 ['title'],表示只能对 title 进行搜索,并将 search_lookups 设置为 ['title__exact'],表示对 title 字段进行精确搜索。

4. 结束语

通过配置 search_fieldssearch_lookups 属性,我们可以在 Django admin 的后台管理界面中实现精确查询功能。这样可以提高用户的搜索体验,减少搜索的时间和工作量。

总结一下,使用 Django admin 的 search_fieldssearch_lookups 属性可以实现精确查询,需要注意的是在设置 search_lookups 属性时要使用精确查询的查询条件。

希望本文对您理解和使用 Django admin 的 search_fields 属性有所帮助!

后端开发标签