【问题标题】:Product Index Using Django ORM使用 Django ORM 的产品索引
【发布时间】:2016-04-11 13:30:51
【问题描述】:

我有一个产品列表,其中包含一个名为“标题”的字段,我一直在尝试获取首字母列表,但运气不佳。我的关闭是以下不起作用,因为“不同”不起作用。

atoz = Product.objects.all().only('title').extra(select={'letter': "UPPER(SUBSTR(title,1,1))"}).distinct('letter')

我一定是哪里出了问题, 我希望有人可以提供帮助。

【问题讨论】:

    标签: sql django orm


    【解决方案1】:

    queryset进来后就可以在python中获取了,很简单:

    products = Project.objects.values_list('title', flat=True).distinct()
    atoz = set([i[0] for i in products])
    

    如果你使用的是 mysql,我找到了another answer useful,尽管使用的是 sql(django execute sql directly):

    SELECT DISTINCT LEFT(title, 1) FROM product;
    

    【讨论】:

    • 是的,SQL 正是我想要的,但如果可能的话,在 Django ORM 中。
    • 我不知道 ORM 中存在任何在 mysql 中实现 LEFT 子字符串函数的东西。也许还有另一种方法?
    【解决方案2】:

    我能想出的最佳答案不是 100% 理想,因为它需要后期处理。

    atoz = sorted(set(Product.objects.all().extra(select={'letter': "UPPER(SUBSTR(title,1,1))"}).values_list('letter', flat=True)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 2021-10-23
      相关资源
      最近更新 更多