2016-11-16 9 views
0

私はdjango ORMで単純なグループを行いたいと思います。グループDjango ORM

SELECT * FROM user AS u JOIN user_photo AS up WHERE u.`user_id` = up.`user_id` GROUP BY up.`user_id`; 

構造user_photo: id |写真|ユーザーID

構造ユーザー: id |名前|ステータス|説明|支払う| user_id

ユーザーがデータベースにアップロードするユーザーの写真が入った別のテーブルがあります。 私は情報をユーザーから取り出すことができますが、ユーザー写真のテーブルからユーザーがアップロードした写真のうち1つと最後の写真だけが必要です。

私は

誰でも助けることができるなど、AVG、MAX、MIN、私のフィールドでのカウントのような任意のモデル関数を使用していない、でグループにしたいですか?

+0

Countモデル関数を使用することはできません。他のテーブルから重複した行をスキップするために、私のidフィールドで何もカウントしたくないだけです。 – Storm

+0

あなたは最後の画像ユーザーごとに送信されますか? –

+0

私は1つのテーブルからユーザーを引き出す必要があります、他のテーブルは、ユーザーの写真のアップロードで、私はちょうどこの写真のテーブルからの最後のユーザーの写真が検索ビューに表示したいですか? – Storm

答えて

0

技術的には、.group_by()を使用してGROUP BYを実行しますが、正確には探しているものではありません。

ORMで目的を達成するには、prefetch_relatedを使用します。

プリフェッチオブジェクトを使用すると、ORMを使用してすべての種類の検索を実行できます。あなたのケースでは

: '写真' は、デフォルトでは、あなたがrelated_nameされるか 'photo_set'

User.objects.prefetch_related(
    Prefetch(
     'photos', 
     queryset=Photo.objects.last(), 
    ) 
) 

。また、.last()メソッドは、選択した.order_by()メソッドで置き換えることができます。

プリフェッチがJOINの代わりに追加のクエリを実行するという点で、SQLの例とは異なります。

関連する問題