1

私が次のようなメッセージモデルを持っている場合のように

class Message(models.Model):
    from = models.ForeignKey(User)
    to = models.ManyToManyField(User)

    def get_authenticated_user_inbox_messages(self):
        return Message.objects.filter(to=authenticated_user).all()

authentication_userは、現在認証されているユーザーを取得する方法です。

ビューでは、 request.userで認証されたユーザーを取得できます

しかし、これをパラメーターとして渡すことを望まない、または設計上できない場合、モデル内から直接取得する方法はありますか?

何か案は?どうもありがとうございます!

4

2 に答える 2

2

いいえ、これは不可能です。Model オブジェクトは Web リクエストから独立して存在します。たとえば、コマンドラインからモデル オブジェクトを使用する管理コマンドを定義できますが、ここでは要求はありません。

私が良い習慣として見たのは、次のように、ユーザー オブジェクトを入力として取るモデル オブジェクトの静的メソッドを定義することです。

class Message(models.Model):
    from = models.ForeignKey(User)
    to = models.ManyToManyField(User)

    @staticmethod
    def get_messages_to(user):
        return Message.objects.filter(to=user)

    @staticmethod
    def get_messages_from(user):
        return Message.objects.filter(from=user)

モデルのカスタム マネージャーを定義し、代わりにこれらの便利なメソッドを定義することもできます。

編集:技術的には可能ですが、お勧めしません。メソッドについては、Global Django Requestsを参照してください。

于 2012-08-31T17:22:15.853 に答える
0

Messages から Users に外部キーを接続すると、django は User モデル インスタンスに関連するフィールドを自動的に作成します。( https://docs.djangoproject.com/en/dev/topics/db/queries/#backwards-related-objectsを参照)

したがって、ユーザー オブジェクトがあれば、 にアクセスできるはずですuser_object.messages.all()。これは、メソッドが行っていることを行うための、よりジャンゴに適した方法のように感じますget_authenticated_user_inbox_messages()

于 2012-08-31T17:25:14.317 に答える