1. ホーム
  2. django

[解決済み] テーブルのフィールドから異なる値を選択する

2022-05-13 11:27:41

質問

Django の ORM を理解するのに苦労しています。私がしたいことは、私のテーブルのフィールド内の明確な値のリストを取得することです...次のいずれかに相当します。

SELECT DISTINCT myfieldname FROM mytable

(またはその代わりに)

SELECT myfieldname FROM mytable GROUP BY myfieldname

少なくとも、生の SQL に頼る前に、Django の方法でやってみたいです。 例えば、テーブルを使って。

id, 通り, 市町村

1、メインストリート、ハル

2, アザーストリート、ハル

3, ビブルウェイ、レスター

4、レスター、アナザー・ウェイ

5、ハイ・ストリート、ロンディジウム

手に入れたい

<ブロッククオート

ハル、レスター、ロンディウム

どのように解決するのですか?

モデルが「ショップ」であるとします。

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 に変更し、結果を平坦にします。

こちらもご覧ください。 Querysetのフィールドごとに異なる値を取得する