4

編集:

私にとってより良い解決策は、特にオブジェクトへの他の種類の制御されたアクセスが必要だったので、パーミッション システムを使用することでした。私は現在、Django-guardian を使用して、このようなオブジェクト レベルのアクセス許可を支援しています。

オリジナル:

ユーザーがストーリーをアップロードできるようにすることで、標準の django ブック ガイドを少し拡張し、著者、発行者などを作成しています。ストーリーの著者 (作成者) のみが updateview を使用できるようにしようとしています。リダイレクトされました。

UpdateStory ビューで get_object を変更すると、問題が発生しますが、何らかの理由でトレースバックが StoryForm initを通過します。エラーは'HttpResponseRedirect' object has no attribute '_meta'

ビュー.py

class UpdateStory(LoginRequiredMixin, UpdateView):
    model = Story
    template_name = 'stories/story_update.html'
    form_class = StoryForm

    def get_object(self, queryset=None):
        obj = super(UpdateStory, self).get_object()
        if not obj.author == self.request.user:
            return redirect(obj)
        return obj

フォーム.py

class StoryForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(StoryForm,self).__init__(*args, **kwargs)

私はまだ新しいので、それは明らかかもしれませんが、数時間探していて困惑しています.

4

2 に答える 2

5

最良のアプローチは、次のような別の mixin を使用することです。

class AuthorRequiredMixin(object):
    def dispatch(self, request, *args, **kwargs):
        if self.object.author != self.request.user:
            return HttpResponseForbidden()
        return super(AuthorRequiredMixin, self).dispatch(request, *args, **kwargs)

もちろん、別の を返すこともできますがHttpResponse、ここでの適切な使用方法を覚えておいてください。

于 2013-08-11T20:34:10.703 に答える