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

相关推荐
hie988941 小时前
使用Spring Boot集成Nacos
java·spring boot·后端
源码方舟1 小时前
基于SpringBoot+Vue的房屋租赁管理系统源码包(完整版)开发实战
vue.js·spring boot·后端
景天科技苑2 小时前
【Rust trait特质】如何在Rust中使用trait特质,全面解析与应用实战
开发语言·后端·rust·trait·rust trait·rust特质
Mikey_n2 小时前
Spring Boot 注解详细解析:解锁高效开发的密钥
java·spring boot·后端
Kookoos3 小时前
【实战】基于 ABP vNext 构建高可用 S7 协议采集平台(西门子 PLC 通信全流程)
后端·物联网·c#·.net
帮帮志3 小时前
vue3与springboot交互-前后分离【完成登陆验证及页面跳转】
spring boot·后端·交互
炒空心菜菜13 小时前
SparkSQL 连接 MySQL 并添加新数据:实战指南
大数据·开发语言·数据库·后端·mysql·spark
蜗牛沐雨15 小时前
Rust 中的 `PartialEq` 和 `Eq`:深入解析与应用
开发语言·后端·rust
Python私教15 小时前
Rust快速入门:从零到实战指南
开发语言·后端·rust
秋野酱16 小时前
基于javaweb的SpringBoot爱游旅行平台设计和实现(源码+文档+部署讲解)
java·spring boot·后端