Django の ORM を理解するのに苦労しています。私がやりたいのは、テーブル上のフィールド内の個別の値のリストを取得することです。これは次のいずれかに相当します。
SELECT DISTINCT myfieldname FROM mytable
(または代わりに)
SELECT myfieldname FROM mytable GROUP BY myfieldname
生の SQL に頼る前に、少なくとも Django の方法で実行したいと思います。たとえば、テーブルの場合:
ID、通り、都市
1、メインストリート、ハル
2、アザーストリート、ハル
3、ビブルウェイ、レスター
4、アナザーウェイ、レスター
5、ハイストリート、ロンディディアム
欲しいもの:
ハル、レスター、ロンディディウム。
ベストアンサー1
あなたのモデルが「ショップ」だとしましょう
class Shop(models.Model):
street = models.CharField(max_length=150)
city = models.CharField(max_length=150)
# some of your models may have explicit ordering
class Meta:
ordering = ('city',)
Meta
クラスordering
属性(タプルまたはリスト)が設定されている可能性があるため、order_by()
パラメータなしで を使用すると、 を使用するときに順序をクリアできますdistinct()
。order_by
()
デフォルトの順序も含めてクエリに順序を適用したくない場合は、パラメータなしで order_by() を呼び出します。
そしてdistinct()
注記では、distinct()
順序付けを使用して使用する場合の問題について説明しています。
DB をクエリするには、以下を呼び出すだけです。
models.Shop.objects.order_by().values('city').distinct()
辞書を返します
または
models.Shop.objects.order_by().values_list('city').distinct()
これは を返すので、ValuesListQuerySet
これを にキャストできます。を追加して結果をフラット化することlist
もできます。flat=True
values_list