数据库中数据的示例:
按照“ 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}}在前端获取到关联表的数据。