如何为 Django 生成动态搜索表单
How to generate a dynamic search form for Django?
我基于 Django 的 ORM 编写了一个 REST API。以下是我的 REST API 的一些示例
curl "http://example.com/api/pcserver?last_update__lt=2012-06-01 00:00:00&hostname__startswith=xen"
在服务器端,我使用 queryset.filter()
函数来处理所有GET
参数,并将结果queryset
转换为json
,然后返回给用户。
现在我在将此 API 转换为基于 Web 的搜索表单时遇到问题。
我想了解这个神奇的搜索表单:
- 使用
- JavaScript 动态添加/删除查询参数,使用
AND
连接它们(我不需要在这些参数之间OR
) - 提供下拉菜单,根据模型选择要搜索的字段
- 支持选择运算符,例如
__lt
、__gt
、__regex
那里有没有轮子,所以我不必重新发明它?谢谢:-)
@yegle
我建议使用这种媒体类型:http://code.ge/media-types/collection-next-json/它是:http://amundsen.com/media-types/collection/format/媒体类型的扩展,您可以毫无问题地实现目标。
请看这个文档:
{"collection": {
"version": 1.0,
"queries": [
{
"href": "http://service.com/my-resource",
"rel": "search",
"prompt": "Enter search string",
"data" : [
{
"name": "query",
"prompt": "Search query",
"required": true
}, {
"name": "gender",
"prompt": "Gender",
"list": {
"default": "female",
"options": [
{"value": "female", "prompt": "Female"},
{"value": "male", "prompt": "Male"}
]
}
}
]
}
]
}}
使用"查询"数组,您可以描述几个搜索模板,这些模板可以轻松地转换为HTML表单。在每个查询对象中,您可以定义:
- 搜索 URI
- 「表格」的標題(即提示);及
- 具有不同要求的任意数量的查询参数。
从上面的例子中看到,有两个查询参数 - "query"和"gender",其中"query"参数可以转换为HTML.input,"gender"参数可以转换为HTML.select。
我希望我正确理解了你的问题和目标。
我不确定 django 工具。但是,您可以使用 MYSQL 的全文布尔搜索来实现上述大部分要求。请参考以下链接并回复您的评论!
http://dev.mysql.com/doc/refman//5.5/en/fulltext-boolean.html
看看 django-filter
或者,以某种黑客方式,使用Django Admin。您可以自定义目标模型的ModelAdmin
,并使用ChangeList
来处理查询字符串。以内置User
为例:
from django.contrib.admin.options.IncorrectLookupParameters
from django.contrib.admin.views.main import ChangeList
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
self = UserAdmin(User, None) # or taken from admin.site._registry if the model admin is registered
cl = ChangeList(request, User, self.list_display,
self.list_display_links, self.list_filter, self.date_hierarchy,
self.search_fields, self.list_select_related,
self.list_per_page, self.list_max_show_all, self.list_editable,
self)
# then cl.get_query_set would process querystring and generate the queryset
try:
cl.get_query_set(request)
except IncorrectLookupParameters:
'encounter an invalid lookup'
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- JavaScript动态附加到搜索字段
- 当我们点击链接时,谷歌搜索会动态
- 从PHP自动完成动态搜索SQL数据库
- 使用PHP和JavaScript动态搜索SQL表并在HTML上显示
- 如何制作动态搜索形式
- 在同一页面上的多个搜索框上动态应用 Jquery 中的搜索过滤器
- 如何从 php 形式在 mysql 数据库中动态搜索
- 如何为 Django 生成动态搜索表单
- 搜索在动态引导多选中不起作用
- 为复选框列表 - 动态响应列表创建一个过滤器搜索框
- 从用户输入到搜索的动态 URL
- 使用 AJAX 响应和 jQuery 动态生成、搜索和过滤表
- angularjs不显示动态搜索结果的分页
- 按键时的动态搜索结果
- 在Sequelize.js中使用动态搜索参数
- jQuery中的动态搜索面板
- Angularjs动态搜索表单
- Jquery Token Input-传递属性动态搜索属性值
- 谷歌可视化图表中的动态搜索过滤器