我有一个典型的 django 视图设置,用于添加新的或编辑当前的“书”模型(通过表单)。这是性质的:
def bookedit(request, bookid=None):
if bookid:
book = get_object_or_404(Book, pk=bookid)
else:
book = Book()
if request.method == 'POST':
<form handling code.....>
我现在想在上面添加一个装饰器,以限制对创建这本书的用户进行编辑。使用 django-guardian 我有以下装饰器来包装上面的代码:
@permission_required_or_403('myapp.edit_book', (Book, 'id', 'bookid'))
这在编辑已经创建的书籍的情况下可以正常工作,即如果用户不是创建者,则会抛出 403。但是,在添加新书时 bookid 是空的并且会使装饰器代码崩溃。有没有处理这种情况的好方法(不分离编辑和添加功能)?
谢谢,格里