Django 查询集 – 排序依据

QuerySet 表示数据库中的一组数据。它可以帮助我们切出我们实际需要的数据。这是一种访问数据的有效方法,因为在我们执行某些操作来评估 QuerySet 之前,它不会执行任何数据库活动。在本教程中,我们在 Django 中使用order_by()

什么是 Order By?

Order By 是按升序或降序对数据进行排序的关键字。在本教程中,我们使用 Django 查询集 来执行 Order By 操作。让我们在 Django 中创建一个简单的项目来存储员工详细信息。

先决条件:我们必须确保我们的系统中有一些可用的东西。

  1. 任何 Python IDE 。在本教程中,我们使用 VS Code。
  2. Django 安装在系统中。

Django项目的基本设置

第1步: 创建虚拟环境。

第2步:现在要在系统中启动 Django 项目,请在命令提示符或终端中编写以下命令。

python 复制代码
django-admin startproject projectName

第3步 :系统中将创建一个新文件夹。在 Django 中,它被称为应用程序。它必须包含一个manage.py文件。

python 复制代码
cd projectName

第4步:现在使用以下命令运行您的项目。

python 复制代码
python manage.py runserver

第5步 :打开 settings.py 并在 INSTALLED_APPS 下连接您的应用程序。在我们的例子中,我们需要添加OrderByPractice

python 复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'OrderByPractice'
]

第6步 :创建模板文件夹并添加 ShowEmployeeDetails.html 文件。您还需要在 settings.py中的 DIRS 属性下指定 templates

python 复制代码
TEMPLATES = [ 
    { 
        'BACKEND': 'django.template.backends.django.DjangoTemplates',   'DIRS': ['templates']   ,         'APP_DIRS': True,         'OPTIONS': {             'context_processors': [ '                 django.template .context_processors.debug',                'django.template.context_processors.request',                'django.contrib.auth.context_processors.auth',                'django.contrib.messages.context_processors.messages',            ],        },    },]
        

第7步 :Django Web 框架包含一个默认的对象关系映射器 ( ORM )。它用于与数据库互连。Django 默认使用 SQLite 作为数据库。创建 models.py 并定义 EmployeeDetails 类。此 EmployeeDetails 类表示一个表,字段(例如 EmployeeName、EmployeeDepartment)表示表中的列。

python 复制代码
from django.db import models


class EmployeeDetails(models.Model):
	EmployeeId = models.AutoField(primary_key=True)
	EmployeeName = models.CharField(max_length=20)
	EmployeeDepartment = models.CharField(max_length=20, blank=True, null=True)
	Country = models.CharField(max_length=20, blank=True, null=True)
	Salary = models.IntegerField(blank=True)

第8步:在 views.py 中创建你的Action方法。它用于获取表中存在的所有数据并将其呈现在 html 文件中。

python 复制代码
from django.shortcuts import render, HttpResponse
from . models import EmployeeDetails


def ShowDetails(request):
	users = EmployeeDetails.objects.all().values()
	return render(request, 'ShowEmployeeDetails.html',
				context={'users': users})

第9步 :您还需要在URL模式中设置路径。导航到 urls.py

python 复制代码
from django.contrib import admin
from django.urls import path, include
from . import views

urlpatterns = [
	path('admin/', admin.site.urls),
	path('', views.ShowDetails, name='ShowDetails')
]

第10步:在 admin.py 中注册您的模型。这样您的表就可以在 Django 管理面板的构建中可见。

python 复制代码
from django.contrib import admin
from . models import EmployeeDetails

admin.site.register(EmployeeDetails)

第11步:现在运行迁移。

python 复制代码
python manage.py migrate
python manage.py makemigrations

运行上述命令后,您可以看到迁移文件夹中存在迁移脚本。

有时您会遇到"没有这样的表"的异常。此问题可通过以下命令解决。它基本上将您的迁移脚本与数据库同步。

python 复制代码
python manage.py migrate --run-syncdb

第12步 :在ShowEmployeeDetails.html文件中添加一些代码。这里我们显示 EmployeeNameEmployeeDepartmentCountrySalary

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<body>
	<h1>Employee Details</h1>
		<form action="{% url 'ShowDetails' %}" >
			{% csrf_token %}
			<table style="border:orange; border-width:5px; border-style:solid;">
				<tr>
				<th>EmployeeName</th>
				<th>EmployeeDepartment</th>
				<th>Country</th>
				<th>Salary</th>
				</tr>
				{% for user in users %}
				<tr>
				<td>{{user.EmployeeName}}</td>
				<td>{{user.EmployeeDepartment}}</td>
				<td>{{user.Country}}</td>
				<td>{{user.Salary}}</td>
				</tr>
				{% endfor %}
			</table>
		</form>
</body>
</html>

第13步:创建超级用户。

python 复制代码
python manage.py createsuperuser

之后,您需要输入用户名和密码

现在运行您的项目并在主机名后写入 /admin并按 Enter 键

第14步:现在添加员工详细信息。

填写所有字段并点击 "保存" 按钮。如果您想添加更多员工,那么您还可以使用"保存并添加另一个"。

第15步:执行查询集 -- Order By

  • 按升序对员工进行排序
  • 按降序对员工进行排序

按升序对员工进行排序

如果我们需要按工资升序对Employees进行排序,那么我们可以使用Django中的order_by 。

您需要在view.py下的 ShowDetails Action 方法中更改一行代码。

python 复制代码
users = EmployeeDetails.objects.all().order_by('Salary').values()  

当你运行你的项目时。然后您可以在 UI 中看到员工详细信息。您可以在下图中观察到托尼·斯塔克的薪水最低,并且出现在顶部。

按降序对员工进行排序

如果您想按薪水对员工进行降序排序。那么我们有三种方法

python 复制代码
users = EmployeeDetails.objects.all().order_by('Salary').values()[::-1]  

或者

python 复制代码
users = EmployeeDetails.objects.all().order_by('Salary').values().reverse()  

或者

python 复制代码
users = EmployeeDetails.objects.all().order_by('-Salary').values()  

您可以在下图中观察到,Bhuwan 的工资最高,显示在顶部。

执行查询集 -- 多重排序依据

多个 order 意味着先按一个,然后再按 other 对于多个 Order By,您只需在 order_by() 方法中添加第二个参数。现在我们需要根据 "薪水" 然后按 "员工姓名"对数据进行排序。

python 复制代码
users = EmployeeDetails.objects.all().order_by('Salary','EmployeeName').values()

您可以在下图中观察到这三名员工阿米特·帕蒂尔 (Amit Patil)、安妮·弗兰克 (Annie Frank) 和托尼·斯塔克 (Tony Stark)

具有相同的薪水,但我们按字母顺序获取 EmployeeName

相关推荐
程序员侠客行43 分钟前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Honmaple1 小时前
QMD (Quarto Markdown) 搭建与使用指南
后端
PP东1 小时前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable
invicinble1 小时前
springboot的核心实现机制原理
java·spring boot·后端
全栈老石2 小时前
Python 异步生存手册:给被 JS async/await 宠坏的全栈工程师
后端·python
space62123272 小时前
在SpringBoot项目中集成MongoDB
spring boot·后端·mongodb
Tony Bai2 小时前
再见,丑陋的 container/heap!Go 泛型堆 heap/v2 提案解析
开发语言·后端·golang
寻找奶酪的mouse3 小时前
30岁技术人对职业和生活的思考
前端·后端·年终总结
梦想很大很大3 小时前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
毅炼3 小时前
Java 基础常见问题总结(4)
java·后端