“添加或编辑”上的permission_required_or_403装饰器?

时间:2012-10-16 15:20:16

标签: django forms permissions decorator django-guardian

我有一个典型的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.....>

我现在想在其上放置一个装饰器来限制对创建Book的用户的编辑。使用django-guardian我有以下装饰器来包装上面的代码:

@permission_required_or_403('myapp.edit_book', (Book, 'id', 'bookid'))

这在编辑已创建的图书的场景中可以正常工作,即如果用户不是创建者,则会抛出403。但是,在添加新书时,bookid为空并且会破坏装饰器代码。有没有一种很好的方法来处理这种情况(没有分离编辑和添加功能)?

谢谢, 格里

1 个答案:

答案 0 :(得分:1)

我很抱歉,但那是不可能的。 django-guardian不是针对该请求而构建的。无论如何,我建议自己创建所有CRUD视图(创建,读取,更新,删除)。