結合テーブルを使用して、モデルにProject
ManyToMany 関係を持つモデルがあります。User
ユーザーがプロジェクトのメンバーではない (結合テーブルにない) 場合、ユーザーが特定のプロジェクトを表示するビューにアクセスできないようにしたいと考えています。
ビュー メソッド内の単純な if ステートメントまたはテンプレート内のカスタム フィルターで解決できることはわかっていますが、カスタム デコレーターを使用してこれを実行できるようにしたいと考えています。これは可能ですか?もしそうなら、どのようにそれを行うことができますか?
何かのようなもの:
def may_user_view_this(function):
def wrapper(request, *args, **kwargs):
user = request.user
project = Project.objects.get(id=???????) #id
if not project.has_user(user):
return HttpResponse('You cannot view this.')
else:
return function(request, *args, **kwargs)
return wrapper
@may_user_view_this() # if not go the specific url
def my_view(request, page_id=None):
# do stuff and render
デコレータ関数からpage_id
送信されたパラメータにアクセスするにはどうすればよいですか?my_view