django聚合查询,django实现搜索功能
主要介绍Django中动态过滤查询集的实现,通过示例代码详细介绍,有一定的参考价值,感兴趣的朋友可以参考一下。
00-1010简介开始使用数据准备创建视图创建URL创建模板创建客户端脚本结论
目录
要构建一个允许过滤和分页的列表页面,你必须让一些独立的东西协同工作。Django的对象关系映射器(ORM)和内置的分页类,让开发者在不知道如何处理数据库和SQL的情况下,也能轻松提高工作效率。在本指南中,您将学习如何使用AJAX动态过滤查询集。
在这个例子中,我使用了Spotify上按国家排列的前50首歌曲的数据集。您也可以从这里下载相同的数据集。像往常一样,本指南中使用的代码可以在GitHub上找到。您可以在本指南的末尾找到此链接。
简介
要开始,请像这样开始一个新的Django项目。
django-管理开始项目my_proj
然后,创建一个示例应用程序。
我的光盘_项目
python manage.py startapp my_app
更新设置. py.
INSTALLED_APPS=[
我的应用程序
]
这是您应该在指南中遵循的目录结构。
数据库. sqlite3
管理. py
my_app/
__init__。巴拉圭
管理. py
apps.py
移民/
模特. py
模板/
base.html
index.html
测试. py
观点. py
我的项目/
__init__。巴拉圭
asgi.py
设置. py
urls.py
wsgi.py
50强
要求. txt
开始使用
在跳转到实际代码之前,我们首先需要将所有数据推送到数据库。
我创建了一个名为TopSongPoularity的基本模型来存储数据集的必要信息。
以下是my_app的models.py。
## my_app/models.py
从django.db导入模型
类别TopSongPoularity(型号。型号):
标题=模型。CharField(max_length=220)
艺术家=模特。CharField(max_length=220)
top_genre=模特。CharField(max_length=220)
年份=型号。IntegerField()
流行=模型。IntegerField()
持续时间=型号。IntegerField()
国家=型号。CharField(max_length=100)
def __str__(self):
返回自我标题
现在您已经创建了模型,使用下面的方法将它迁移到数据库中。
python manage.py进行迁移
python manage.py迁移
接下来,我们将把所有CSV数据推入数据库,因此我们将使用shell来执行一个脚本。
python manage.py shell
在shell中运行以下脚本,将CSV数据推入数据库。
#Django Shell
创建视图
接下来,让我们来编写视图。ListTopSongs
是一个基于类的视图(CBV),它继承了View
类。在该类的get()
方法中,它接受查询参数并相应地过滤QuerySet。在QuerySet被过滤后,它再调用get_paginated_context()
,以获得序列化格式的分页数据。
getCountries()
是一个基于函数的视图(FBV),它为数据库中所有独特的国家返回JSON输出。
#my_app/views.py
创建URL
现在,让我们对视图进行路由。
#my_proj/urls.py
创建模板
现在后端代码已经完成,让我们转到前端。
我使用了一个基本模板(base.html
),包括Bootstrap和jQuery库。
<!--templates/base.html-->
现在,让我们创建index.html
,显示带有过滤器的表格。这个模板文件继承了base.html
,并创建了一个带有标题和空主体的表格。最后,它还包含两个 "下一步 "和 "上一步 "的按钮。
index.html
的其余部分,即JavaScript部分,将在下面解释。
<!--templates/index.html-->
创建客户端脚本
本指南的最后一部分是使用AJAX连接前端和后端。请参考下面代码片断中提到的注释。
<!---templates/index.html--->
结语
在本指南中,你已经学会了如何使用AJAX以及如何与后端进行异步通信。过滤表格数据是一个常见的处理场景,我希望本指南能让你更好地了解如何处理过滤数据。
如果你愿意,你也可以使用REST框架,如Django REST框架来保持简单。
如果你在遵循本指南的过程中遇到任何问题,你可以随时查看我的Github仓库来查看整个项目。
到此这篇关于在Django中动态地过滤查询集的实现的文章就介绍到这了,更多相关Django动态过滤查询集内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。