Django ORM INNER JOIN

user3236034

DjangoORMでこのクエリを実行できませんでした。内部結合を作成する方法、このクエリを実行して必要な列のみを返す方法は?

SELECT     establecimiento.nombre, categoria.titulo
FROM         establecimiento INNER JOIN
                      categoria ON establecimiento.categoria = categoria.id
Peter DeGlopper

pdxwebdevに応答するコメントの情報(外部キーフィールドが宣言されている)に基づくと、これは簡単です。Djangoは、外部キー関係に必要な結合動作の多くを自動化します。

結合から2つのフィールドのみを選択するなど、そのクエリを正確に複製するには、のいずれかvaluesvalues_listまたはonly取得するPythonオブジェクトに応じて実行する必要があります。たとえば、values辞書の反復可能なクエリセットを取得するために使用するクエリは次のとおりです。

Establecimiento.objects.values('nombre', 'categoria__titulo')

values_listディクショナリの代わりにタプルを取得し、これら2つ以外のすべてのモデルフィールドが延期onlyされているEstablecimientoインスタンスを取得します(データベースから取得されていませんが、必要に応じて検索されます)。

その__ような外部キー関係に従うために使用する場合、Djangoは自動的に内部結合を行います。

select_relatedクエリセットで使用して、特定のフィールドを取得していない場合でも結合を実行するように要求することもできます。例えば:

Establecimiento.objects.select_related('categoria')

これにより、のクエリが生成されデータがすでにメモリにロードされているインスタンスのクエリSELECT * from ...セットが返されます。Establecimientocategoria

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事