2016-04-11 5 views
1

私は、 'Title'というフィールドを持つ製品のリストを持っています。私はあまり運がない最初の文字のリストを取得しようとしています。私が持っている閉鎖は、「Distinct」がうまく動作しないためにdosn'tが働くということです。私が間違ってどこかに行くされている必要がありProduct Index Django ORMを使用する

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

、 は、私は誰かが助けることができると思います。クエリセットの中に得た後にあなたが些細である、Pythonでそれを得ることができる

答えて

0

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

MySQLを使用している場合、私は、SQL(django execute sql directly)を使用しながらも、another answer usefulが見つかりました:

SELECT DISTINCT LEFT(title, 1) FROM product; 
+0

はい私は可能な限りSQLをDjango ORMに入れたいと思います。 –

+0

私は、mysqlに 'LEFT'部分文字列関数を実装しているORMには何も存在していません。多分それには別の方法がありますか? –

0

私が考えることができる最高の答えは、後処理が必要なので100%理想的ではありません。

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