Django组对象按列的第一个字符

samix73

我试图按name每个记录字段的字符对记录进行分组,并限制每个组中的项目,这是我想出的:

desired_letters = ['a','b','c',..,'z']
some_variable = {}
for desired_letter in desired_letters:
    some_variable += User.objects.all().order_by("name").filter(name__startswith=desired_letter)[:10]

而且我在for循环中运行此查询并更改desired_letter为所需的字母,还有其他方法可以优化此解决方案并使它成为单个查询而不是for循环吗?

AKS

从另一个答案中的注释中:

我实际上正在寻找一种在Django Orm中实施按首字符分组的方法

我会按照以下3个步骤进行操作:

  1. name字段的第一个字母注释每个记录为此,您可以将Substrfunction与Lower

    from django.db.models.functions import Substr, Lower 
    qs = User.objects.annotate(fl_name=Lower(Substr('name', 1, 1)))
    
  2. 接下来,使用第一个字母将所有记录分组,并获取ID计数。这可以通过使用带有值的注释来完成

    # since, we annotated each record we can use the first letter for grouping, and 
    # then get the count of ids for each group
    from django.db.models import Count
    qs = qs.values('fl_name').annotate(cnt_users=Count('id'))
    
  3. 接下来,您可以使用第一个字母对这个查询集进行排序:

    qs = qs.order_by('fl_name')
    

将所有这些合并为一个语句:

from django.db.models.functions import Substr, Lower
from django.db.models import Count 

qs = User.objects \
         .annotate(fl_name=Lower(Substr('name', 1, 1))) \
         .values('fl_name') \
         .annotate(cnt_users=Count('id')) \
         .order_by('fl_name')

最后,您的查询集将如下所示。请注意,我在注释时将第一个字符转换为小写。如果不需要,可以删除该Lower功能:

[{'fl_name': 'a', 'cnt_users': 12}, 
 {'fl_name': 'b', 'cnt_users': 4},
 ...
 ...
 {'fl_name': 'z', 'cnt_users': 3},]

如果需要,则需要字母和数字的字典:

fl_count = dict(qs.values('fl_name', 'cnt_users'))
# {'a': 12, 'b': 4, ........., 'z': 3}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django组对象按列的第一个字符

来自分类Dev

指针的第一个字符

来自分类Dev

Bash脚本按第一个字符复制文件夹

来自分类Dev

按第一个字符对单词进行分组

来自分类Dev

按第一个字符分割文件

来自分类Dev

mongodb按第一个字符分组

来自分类Dev

按foreach中的第一个字符对行进行分组

来自分类Dev

分组表按名称的第一个字符查看

来自分类Dev

按第一个字符分割文件-UNIX

来自分类Dev

按空格后的第一个字符对TStringList进行排序

来自分类Dev

重击-按不是第一个字符排序

来自分类Dev

无法按第一个字符进行grep

来自分类Dev

PHP Mysqli 按单词的第一个字符搜索

来自分类Dev

从字符串Django模板中删除第一个字符

来自分类Dev

从字符串Django模板中删除第一个字符

来自分类Dev

为什么对象的键只是第一个字符?

来自分类Dev

想要在Django模板中显示姓氏的第一个字符

来自分类Dev

想要在Django模板中显示单词的第一个字符

来自分类Dev

通过第一个字符过滤列值?

来自分类Dev

获取数据框中列的每个元素的第一个字符

来自分类Dev

如何使用sed删除特定列中的第一个字符

来自分类Dev

如何在excel中求和列的第一个字符?

来自分类Dev

对象搜索键值并删除其中的第一个和最后一个字符

来自分类Dev

如何按字符串中的第一个字符对数组排序?

来自分类Dev

如何使输入字符串按原样使用,而不是仅使用第一个字符?

来自分类Dev

如何检查列表中每个字符串的第一个字符是否以一组特定的字符开头?

来自分类Dev

通过使用C#以名称中的第一个字符“#”创建Active Directory组

来自分类Dev

R取第一个字符串并将其填充为组

来自分类Dev

第一个字符出现后的 Python 正则表达式匹配组

Related 相关文章

  1. 1

    Django组对象按列的第一个字符

  2. 2

    指针的第一个字符

  3. 3

    Bash脚本按第一个字符复制文件夹

  4. 4

    按第一个字符对单词进行分组

  5. 5

    按第一个字符分割文件

  6. 6

    mongodb按第一个字符分组

  7. 7

    按foreach中的第一个字符对行进行分组

  8. 8

    分组表按名称的第一个字符查看

  9. 9

    按第一个字符分割文件-UNIX

  10. 10

    按空格后的第一个字符对TStringList进行排序

  11. 11

    重击-按不是第一个字符排序

  12. 12

    无法按第一个字符进行grep

  13. 13

    PHP Mysqli 按单词的第一个字符搜索

  14. 14

    从字符串Django模板中删除第一个字符

  15. 15

    从字符串Django模板中删除第一个字符

  16. 16

    为什么对象的键只是第一个字符?

  17. 17

    想要在Django模板中显示姓氏的第一个字符

  18. 18

    想要在Django模板中显示单词的第一个字符

  19. 19

    通过第一个字符过滤列值?

  20. 20

    获取数据框中列的每个元素的第一个字符

  21. 21

    如何使用sed删除特定列中的第一个字符

  22. 22

    如何在excel中求和列的第一个字符?

  23. 23

    对象搜索键值并删除其中的第一个和最后一个字符

  24. 24

    如何按字符串中的第一个字符对数组排序?

  25. 25

    如何使输入字符串按原样使用,而不是仅使用第一个字符?

  26. 26

    如何检查列表中每个字符串的第一个字符是否以一组特定的字符开头?

  27. 27

    通过使用C#以名称中的第一个字符“#”创建Active Directory组

  28. 28

    R取第一个字符串并将其填充为组

  29. 29

    第一个字符出现后的 Python 正则表达式匹配组

热门标签

归档