在Django里查询数据库时,如何按照desc倒序返回数据?

数据库中数据的示例:
在这里插入图片描述

按照“ id ”从小到大查询数据,可以写成:

projects = models.Project.objects.all().order_by("id")
或
projects = models.Project.objects.order_by("id")

在这里插入图片描述

从大到小排序:

projects = models.Project.objects.all().order_by("-id")
或
projects = models.Project.objects.order_by("-id")

在这里插入图片描述

下面介绍其他种类的排序

随机排序:
第一种(常用的一种):

Content.objects.all()

第二种:

Content.objects.all().order_by('?')
或
Content.objects.order_by('?')

在这里插入图片描述

但是order_by(?)这种方式也许expensive并且slow,这取决于后端数据库。

按照关系表的字段排序:

class Project(models.Model):
	'''项目表'''
    name = models.CharField(max_length=20, unique=True, null=False)

class Task(models.Model):
	'''任务表'''
	name = models.CharField(max_length=20, unique=True, null=False)
    category = models.IntegerField(choices=((0, '功能测试'), (1, '自动化测试'), (2, '性能测试')), default=0)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)

按照Project的字段name,对Task进行排序,只需要外键后加双下划线
Task.objects.order_by(‘project__name’)

如果只是按照外键来排序,会默认按照关联的表的主键排序:

Task.objects.all().order_by('project')
或
Task.objects.order_by('project')

上面等价于:

Task.objects.all().order_by('project__id')
或
Task.objects.order_by('project__id')

双下划线返回的是join后的结果集,而单下划线返回的是单个表的集合:

Task.objects.all().order_by('project_name')
或
Task.objects.order_by('project_name')

Note: 无论是单下划线还是双下划线,我们都可用{ { task.project.name}}在前端获取到关联表的数据。

猜你喜欢

转载自blog.csdn.net/weixin_45743420/article/details/103043788