使用 Django ORM 的产品索引
Posted
技术标签:
【中文标题】使用 Django ORM 的产品索引【英文标题】:Product Index Using Django ORM 【发布时间】:2016-04-11 13:30:51 【问题描述】:我有一个产品列表,其中包含一个名为“标题”的字段,我一直在尝试获取首字母列表,但运气不佳。我的关闭是以下不起作用,因为“不同”不起作用。
atoz = Product.objects.all().only('title').extra(select='letter': "UPPER(SUBSTR(title,1,1))").distinct('letter')
我一定是哪里出了问题, 我希望有人可以提供帮助。
【问题讨论】:
【参考方案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)))
【讨论】:
以上是关于使用 Django ORM 的产品索引的主要内容,如果未能解决你的问题,请参考以下文章
django-ORM-常用字段,常用参数,索引,联合唯一索引,联合索引(不唯一)