テーブルフィールドから個別の値を選択する 質問する

テーブルフィールドから個別の値を選択する 質問する

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=Truevalues_list

参照:フィールドごとにクエリセットの個別の値を取得する

おすすめ記事