0


1

オブジェクトの更新/削除を許可するビューでは、編集するオブジェクトがグループに属していることを確認するデコレータが必要です(モデル "loja")。 どちらもURLで定義されています。

/ [スラッグモデルloja - s_loja] / [viewname-ex:addmenu] / [オブジェクトID - obj_id]

オブジェクトのモデルはさまざまである可​​能性があるので、デコレータはオブジェクトのモデルを引数として使用します。 引数として渡すことができるすべてのモデルは、lojaという名前のモデル「loja」への外部キーを持っています。

デコレータ:

def acesso_objecto(modelo):def wrap(f):def wrapper(* args、** kwargs):s_loja = kwargs ['s_loja'] obj_id = kwargs ['obj_id'] objecto = get_object_or_404(modelo、pk = obj_id) = get_object_or_404(Loja、slug = s_loja)objecto.lojaがlojaでない場合:Http404を発生させるelse:return f(* args、** kwargs)return wrapper return wrap

基本的に、グループ "loja"とオブジェクトが存在し、オブジェクトがそのグループに属していない限り、404エラーが発生します。

デコレータがなければ、ビューは正常に動作しますが、ifステートメントはそうではない場合でも常にtrueなので、デコレータは常に404を発生させます。 確認のためにloja.idまたはloja.slugを使用した場合、それらは関連しているように機能しますが、この機能は常に失敗するように思われるので、その理由はわかりません。

1 Answer


1


is not`を!= `に置き換えてください。

not loja`は True`に評価されており、ifステートメントは objecto.loja`と True`の間の同等性をテストしています。