gpt4 book ai didi

python - 创建一个列出查询集中对象类型数量的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:36 24 4
gpt4 key购买 nike

我正在尝试创建一个字符串,用于打印以下模型的查询集中每种类型的项目的总数。

class Booking(models.Model):

_JACKET_SIZES = (
('s', 'Small'),
('m', 'Medium'),
('l', 'Large'),
('xl', 'X Large'),
('xxl', '2X Large'),
('unknown', 'Unsure'),
)

...
jacket_size = models.CharField(max_length=7, choices=_JACKET_SIZES, default='small', null=True)
...

基本上,我正在尝试将夹克尺寸列表整理成一个字符串。这是我已经尝试过的,但我确信有一种更简单的方法。

bookings = Booking.objects.all()

jackets = {}
for booking in bookings:
jackets.setdefault(booking.get_jacket_size_display(), jackets.get(booking_get_jacket_size_display(), 0) + 1)

o = ', '.join('{}: {}'.format(k,v) for k,v in jackets.items()])

假设查询集包含 4 个对象。 1 件小号夹克、2 件中号夹克和 1 件大号夹克。

上述代码的结果似乎只提供了 1 个中号夹克,而不是 2 个中号夹克,就好像它忽略了第二个中号夹克一样。

最佳答案

您可以通过执行 .annotate(..) 来做到这一点:

from django.db.models import Count

Booking.objects.values('jacket_size').annotate(
number=Count('id')
).order_by('jacket_size')

这将给出一个QuerySet,其中包含如下字典:

<QuerySet [
{'jacket_size': 'l', 'number': 12},
{'jacket_size': 'm', 'number': 25},
{'jacket_size': 's', 'number': 31},
{'jacket_size': 'unknown', 'number': 17},
{'jacket_size': 'xl', 'number': 9},
{'jacket_size': 'xxl', 'number': 7},
]>

一些评论:

    没有 预订
  1. jacket_size不会显示在数据库中,因为数据库不知道这些尺寸的存在,因此您可能想要“修补”数据(通过将其转换为列表或字典,并添加缺失的条目);
  2. 强制GROUP BY需要.order_by(..)

关于python - 创建一个列出查询集中对象类型数量的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53074222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com