【发布时间】:2009-11-11 17:52:01
【问题描述】:
在允许更新/删除对象的视图上,我需要一个装饰器来验证要编辑的对象是否属于一个组(模型“loja)。两者都在 url 中定义:
/[slug model loja--s_loja]/[viewname-ex:addmenu]/[object 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)
loja = get_object_or_404(Loja, slug=s_loja)
if objecto.loja is not loja:
raise Http404
else:
return f(*args, **kwargs)
return wrapper
return wrap
基本上,除非组“loja”和对象存在并且对象属于该组,否则应该引发 404 错误。
没有装饰器,视图工作正常,但装饰器总是引发 404,因为 if 语句总是正确的,即使它不应该是。如果我使用 loja.id 或 loja.slug 进行验证,它会与它们相关,但此功能似乎总是失败,我不知道为什么。
【问题讨论】: