QuerySet 表示数据库中的一组数据。它可以帮助我们切出我们实际需要的数据。这是一种访问数据的有效方法,因为在我们执行某些操作来评估 QuerySet 之前,它不会执行任何数据库活动。在本教程中,我们在 Django 中使用order_by()
。
什么是 Order By?
Order By 是按升序或降序对数据进行排序的关键字。在本教程中,我们使用 Django 查询集 来执行 Order By 操作。让我们在 Django 中创建一个简单的项目来存储员工详细信息。
先决条件:我们必须确保我们的系统中有一些可用的东西。
- 任何 Python IDE 。在本教程中,我们使用 VS Code。
- 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文件中添加一些代码。这里我们显示 EmployeeName 、EmployeeDepartment 、Country 和 Salary。
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
