2012-03-01 14 views
2

私はここで何が間違っていますか?Djangoで別個に選択

[app.system_name for app in App.objects.all().distinct('system_name')] 

は私を与える:

[u'blog', u'files', u'calendar', u'tasks', u'statuses', u'wiki', u'wiki', u'blog 
', u'files', u'blog', u'ideas', u'calendar', u'wiki', u'wiki', u'statuses', u'ta 
sks', u'survey', u'blog'] 

あなたは、私がフィールドSYSTEM_NAMEのすべての一意の値を望ん期待するかもしれないが、今私は、すべてのアプリケーションインスタンスを取り戻すいます。

+0

値を 'set'に投げて、重複する_exを事実上削除できます。 – katrielalex

答えて

10
  1. のみジャンゴ1.4以降でサポートされています。 1.3を実行している場合、無視しているだけです。

  2. あなたがある Djangoの1.4を実行している、あなたが含まれており、distinctのすべてのフィールドで始まるorder_by句を追加する必要があります。

  3. でも、distinctでフィールドを指定することは、PostgreSQLでのみサポートされます。あなたがMySQLのような何かを実行しているなら、あなたは運が悪いです。

これらの情報はすべてdocsです。

+0

私は1.3を使っているので、私は運が悪いと思う。 –

+0

このようにしている限り、はい、あなたは運が悪いようです。しかし、これは、あなたが望む実際のものをどうやって行うのかを単に尋ねるのではなく、特定の方法がなぜ機能しないのかを尋ねる典型的なケースです。クエリーセットで重複した値を削除する方法に関する新しい質問を作成するか、単純にそのような質問を検索してください。私は前に似たようなものが見られることを知っている。 –

7

フィールド名とdistinctを使用するときは、order by同じフィールド名にあります。

App.objects.order_by('system_name').distinct('system_name') 

docから:あなたはフィールド名を指定すると

、あなたは(ORDER_BYを提供する必要があります) QuerySetで、order_by()のフィールドは、同じ順序で distinct()のフィールドで始まる必要があります。

たとえば、SELECT DISTINCT ON(a)は、列aの各 値の最初の行を返します。注文を指定しないと、 の任意の行が表示されます。 distinct内のフィールドを指定

+0

mysqlはdistinct()とパラメータの使用をサポートしていません。 –

2

distinct()を使用する場合は、values_list()を使用できます。

App.objects.values_list('system_name').distinct() 
関連する問題