私はDjangoに付属の標準Userモデル(django.contrib.auth)を使用しています。私は、Djangoアプリケーションで自分のモデルのいくつかを作り、このような関係を作成しました:Django - ユーザーをサブクラス化する代わりに?
from django.db import models
from django.contrib.auth.models import User
class GroupMembership(models.Model):
user = models.ForeignKey(User, null = True, blank = True, related_name='memberships')
#other irrelevant fields removed from example
だから私は今、ユーザーの現在のメンバーシップのすべてを取得するには、この操作を行うことができます。
user.memberships.all()
しかし、
user.memberships.all().select_related('group__name')
これは正常に動作しますが、私はテンプレートで、このデータを取得したい:、私はこのように、より複雑なクエリを実行できるようにしたいです。このようなロジックをテンプレートの中に入れようとするのはばかげているので(とにかく動作させることはできません)、より良い方法を作りたいと思っています。私はサブクラスのUserにすることができましたが、それは素晴らしい解決策のようには思えません。将来私のアプリケーションを他のDjangoのサイトに移動したいかもしれません。おそらく、Userをサブクラス化した別のアプリケーションがあればそれを働かせることができます。
GroupMembership
の中にメソッドを作成するのがベストですか、get_by_user(user)
と呼ばれますか?私はテンプレートからこれを呼び出すことができますか?
私は誰でもこれを構造化することができますアドバイスをいただければ幸いです。これは少し長い/曖昧です。
Userモデルには、Group Membership定義によってメソッドが追加されていますか? –
私はそれがメソッドを追加したのか分からなかった。私はUser.membershipsプロパティを作成することを知っていましたが、それだけではありませんか? –