新しいモデルを追加したり、現在の「本」モデルを(フォームを介して)編集したりするための典型的な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は空になり、デコレータコードがクラッシュします。このシナリオを(編集機能と追加機能を分離せずに)処理する良い方法はありますか?
ありがとう、ジェリー