2016-08-28 7 views
0

追加DBクエリを避けるため、user.pkrequest(ログインしているユーザー用)から入手したいと考えています。ビューに関係のないコードでrequest.userを取得するにはどうすればよいですか?

viewsには、変数requestがあります。このrequestを他の場所(表示されていない)にするにはどうすればよいですか? HttpRequestを直接インポートすると、HttpRequestuserオブジェクトを取得するため、ミドルウェアの変更が原因で助けになりません。 userオブジェクトでこの「修正済み」HttpRequestを取得するにはどうすればよいですか?インポートするには何が必要ですか?

EDIT: 私はカスタマイズしたユーザーのアドレスを実装するので、ユーザーはmysite.com/usernameまたはmysite.com/id123のようなアドレスの2種類を有していてもよいので、ナビゲーションメニュー(My page)から1つのリンクが動的です。私のような何かをしたい、私はdjango-sitetreeを使用したナビゲーションメニューの作成、場合:

from sitetree.sitetreeapp import register_items_hook 

def my_items_processor(tree_items, tree_sender): 

    # get somehow `request` 

    if tree_sender == 'menu.children': 
     for item in tree_items: 
      if request.user.username: 
       item.url = request.user.username 
      else: 
       item.url = request.user.pk 

    return tree_items 
+0

は、要求応答サイクルにまだあなたの機能であり、つまりはあなただけでない、現在のリクエストがあります現在の範囲にアクセスできますか? – knbk

+0

@knbk、上記の新しい情報を追加しました。私が理解するように、私の機能は要求応答サイクルから外れています。私は何らかの形で現在ログインしているユーザーのモデルを取得する必要があります。通常、私は '要求'からそれを得ることができます。私は '現在のユーザーを得る 'という方法を見つけることを試みたが運がなかった。 – TitanFighter

+1

「現在ログインしているユーザー」という概念は、要求オブジェクトに直接結び付けられています。これが要求 - 応答サイクルの外にあり、要求が存在しない場合、ログインしていないユーザーが存在しないため、ログインしたユーザーにはアクセスできません。リクエスト・レスポンス・サイクルに入っていれば、何らかの方法でリクエストを関数に渡すことができるかもしれませんが、そうでない場合は、不運です。 – knbk

答えて

1

私はちょうどは別の質問で(formsに関連はあるが)、この同じ質問に答えsee my answer thereをください。あなたがそのポストのように詳細なセットアップthreadlocals.pyを持っていると仮定すると、とsitetree/threadlocals.pyとしてそれを保存し

from sitetree.sitetreeapp import register_items_hook 
from sitetree.threadlocals import get_current_user 

def my_items_processor(tree_items, tree_sender): 

    user = get_current_user() 

    if tree_sender == 'menu.children': 
     for item in tree_items: 
      if user.username: 
       item.url = user.username 
      else: 
       item.url = user.pk 

    return tree_items 
+1

答えが正しかったにもかかわらず、私が使用したかったアプローチが正しくないことに気付きました。私が現在見ているように、より良い方法は、私のmodels.pyに 'user_url'フィールドを追加して、user_idかusernameを保存するかどうかです。 – TitanFighter

+0

幸運@ティタンファイター! –

関連する問題