В представлениях, которые позволяют обновлять / удалять объекты, мне нужен декоратор, который проверяет принадлежность редактируемого объекта к группе (модель "loja"). Оба определены в URL:
/ [slog model loja - s_loja] / [viewname-ex: addmenu] / [идентификатор объекта - 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 для проверки, он работает как ОНИ, но кажется, что эта функция всегда дает сбой, и я понятия не имею, почему.