【发布时间】:2021-11-15 09:51:21
【问题描述】:
我有一张图表,显示了按地区划分的不同许可类型以及每个地区有多少有效许可。有没有办法在查询集中按特定顺序对项目进行排序以输出到图表?
这些是我的模型:
class Licence(models.Model):
status = models.CharField(choices=STATUS, max_length=1000)
number = models.CharField(unique=True, max_length=1000)
licence_type = models.ForeignKey(
"LicenceType", on_delete=models.SET_NULL, null=True
)
class LicenceType(models.Model):
region = models.ForeignKey(
"Region", on_delete=models.SET_NULL, null=True
)
class Region(models.Model):
slug = models.SlugField(primary_key=True)
这是我的看法:
def dashboard(request):
# total number of active licences across regions
active_licences = (
Licence.objects.values("licence_type", "licence_type__region")
.annotate(total=Count("id"))
.order_by("licence_type")
)
return render(request, "dashboard.html", "active_licences": active_licences)
有没有一种方法可以指定区域出现的顺序?例如,它们当前的顺序是(按 pk)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],但我希望它们显示为 [1, 3, 2, 4, 5, 6, 7, 8, 9, 10]。
【问题讨论】:
-
看来您目前正在通过
licence_type订购。你能解释一下想要的顺序吗? -
现在它们只是按 pk 排序,但客户希望按特定顺序查看区域/省,所以我需要能够对它们进行排序,以便“ON”在前,“ AB”是第二个,“BC”是第三个,等等。而不是“ON”、“BC”、“AB”等。
-
基本上我想优先考虑前三个,然后以任何顺序显示其余的。
标签: django sql-order-by django-orm django-annotate