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

相关推荐
Livingbody25 分钟前
Fast Whisper 语音转文本
后端
程序员岳焱32 分钟前
深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?
java·人工智能·后端
G探险者38 分钟前
《深入理解 Nacos 集群与 Raft 协议》系列五:为什么集群未过半,系统就不可用?从 Raft 的投票机制说起
分布式·后端
G探险者39 分钟前
《深入理解 Nacos 集群与 Raft 协议》系列一:为什么 Nacos 集群必须过半节点存活?从 Raft 协议说起
分布式·后端
G探险者43 分钟前
《深入理解 Nacos 集群与 Raft 协议》系列四:日志复制机制:Raft 如何确保提交可靠且幂等
分布式·后端
G探险者44 分钟前
《深入理解 Nacos 集群与 Raft 协议》系列三:日志对比机制:Raft 如何防止数据丢失与错误选主
分布式·后端
G探险者1 小时前
《深入理解 Nacos 集群与 Raft 协议》系列二:Raft 为什么要“选主”?选主的触发条件与机制详解
分布式·后端
我的golang之路果然有问题1 小时前
云服务器部署Gin+gorm 项目 demo
运维·服务器·后端·学习·golang·gin
Java水解1 小时前
彻底解决Flask日志重复打印问题:从原理到实践
后端·flask
Nick同学1 小时前
GatewayWorker 使用总结
后端·php