django - Django ORM注释计数项目并按特定顺序排序?
问题描述
我有一个图表,显示了按地区划分的不同许可证类型以及每个地区有多少活动许可证。有没有办法在查询集中以特定顺序对项目进行排序以输出到图表?
这些是我的模型:
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]
.
解决方案
我最终在视图中处理来自查询集的数据并将其作为元组列表返回到模板,如下所示:
def dashboard(request):
# total number of active licences across provinces
licences_by_province = list(
Licence.objects.values("licence_type__region")
.annotate(total=Count("id"))
.order_by("licence_type")
)
# save provinces and totals to a list
licence_list = []
for province in licences_by_province:
licence_list.append(tuple(province.values()))
# re-order list to include ON, AB, BC at the beginning
d = dict([('ON', 0), ('AB', 0), ('BC', 0)])
d.update(dict(licence_list))
active_licences = list(d.items())
return render(request, "dashboard.html", "active_licences": active_licences)
推荐阅读
- google-apps-script - 将电子邮件地址从一张表移动到另一张表的脚本
- pine-script - 为什么我得到不匹配的输入?
- python - Python - 获取错误不可排序类型:str<> >= int<>
- ios - 如果单元格被点击则显示按钮并在 UITableView 中离开后隐藏
- objective-c - allowedFileTypes 已弃用
- android - 损坏的 AVD ini 文件:C\User\~\.android\avd\avd_name.ini
- c++ - 为什么即使数据长度是块大小的倍数,PKCS#7 也总是需要填充
- php - 使用array_walk的php计数问题
- amazon-web-services - 无法在 AWS VPC 向导中选择“改用 NAT 实例”
- c - 当用户在C中输入“退出”时如何让程序终止