2016-09-19 7 views
0

私は、ユーザーのグループを定義するDjangoアプリケーションを作成しています。ユーザーは多くのグループに参加できます。Django:他のモデルと関連しているUserに関するクエリをどこに置くべきですか?

少なくとも1つのグループのメンバーで、重複していないユーザーをグループの一覧から取得できます。

私はそれを達成するためのクエリを書いた。そのメソッドはgroup_idのリストを取り、単純にユーザーのリストを返します。 私の質問は:その方法を置くのに最適な場所はどこですか?

私のグループモデルのカスタムマネージャを作成しようと考えていました。しかし、私の方法がユーザーのリストを私に返すので、論理的ではないようです。ドキュメントによると

:モデルのhttps://docs.djangoproject.com/en/1.8/topics/db/managers/

マネージャーはそのモデルについてのクエリが含まれていなければなりません。

調査の結果、少なくとも私の場合はdjango.auth.models.Userマネージャーを拡張することは勧められません。

現時点では私のメソッドを 'service.py'ファイルに入れていますが、私がしようとしていることを達成するためのよりエレガントな方法がないのだろうかと思っていました。

アドバイスをいただきありがとうございます!

答えて

0

UserからGroupまでのの関係がありますか?

class Group(models.Model): 
    users = models.ManyToManyField('auth.User') 
私はそれが filterちょうど1ラインコールだが、これを達成する方法を書く理由はないと思う

:あなたはそれメソッドにする必要がある場合

User.objects.filter(groups__in=group_ids) 

、Iドンこれを置くための「公式の」場所があるとは思わない。 Userマネージャはおそらく最も近いでしょうが、あなたが言うように、Userにカスタムマネージャを追加することは苦痛です。 Djangoのアプリケーションは単にPythonのコードであり、非フレームワークのメソッドがどこに行くかについてはあまり規範的ではありませんので、コード/チームにとって意味のあるところに置いてください。

Django already provides all of this functionalityに注意してください。モデル名はGroupであることもありますので、自分でホイールを再作成しているようです。

+0

感謝を。実際、私はすでにユーザーグループを使用して許可を得ています。私の質問は、概念とそのようなコードを置く場所に関するものでした。私のアプリはニュースレターであり、私はニュースレターキャンペーンで非常に特定のユーザーをターゲットにしたいと思っていました。しかし、あなたは正しいです、私は完全にDjangoのグループでそれを管理することができます! :) – Jisson

0

あなたのviews.pyでは、以下の機能を使用することができますし、あなたのビューでそれを呼び出す:答えのための

def get_groups_users(*groups): 
    users = User.objects.filter(groups__name__in=list(groups)) 
    return list(set(users)) 
関連する問題