相关对象比较的奇怪修饰结果

2024-05-08 03:13:59 发布

您现在位置:Python中文网/ 问答频道 /正文

在允许更新/删除对象的视图上,我需要一个decorator来验证要编辑的对象是否属于组(model“loja”)。两者都在url中定义:

/[slug model loja--s\u loja]/[viewname ex:addmenu]/[object id--obj\u 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错误。你知道吗

如果没有decorator,视图可以正常工作,但是decorator总是抛出404,因为if语句总是正确的,即使它不应该是正确的。如果我使用loja.id公司或者鼻涕虫为了验证它的工作,因为他们是相关的,但这个功能似乎总是失败,我不知道为什么。你知道吗


Tags: 对象模型视图idobjmodelreturnobject