gpt4 book ai didi

django - Django UpdateView 中的对象所有权验证

转载 作者:行者123 更新时间:2023-12-02 06:36:13 25 4
gpt4 key购买 nike

编辑:

对我来说更好的解决方案是使用权限系统,特别是因为我需要对对象进行其他类型的受控访问。我现在使用 Django-guardian 来帮助处理这样的对象级权限。

原文:

我正在通过让用户上传故事以及拥有作者、出版商等来扩展标准 django 书籍指南。我试图只让故事的作者(创建者)使用更新 View ,而其他用户则是重定向了。

在 UpdateStory View 中修改 get_object 将其设置为关闭,但回溯通过我的 StoryForm 初始化 因为某些原因。错误是 'HttpResponseRedirect' object has no attribute '_meta'
View .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)

我还是新手,所以这可能很明显,但我一直在寻找几个小时,但我很困惑。

最佳答案

http://ccbv.co.uk/projects/Django/1.5/django.views.generic.edit/UpdateView/

通过上面的链接了解如何UpdateView作品。 get_object应该返回模型实例,不应该返回HttpResponseRedirect对象,这就是您收到该错误的原因。

尝试在 dispatch 中进行检查方法如下。

def dispatch(self, request, *args, **kwargs):
""" Making sure that only authors can update stories """
obj = self.get_object()
if obj.author != self.request.user:
return redirect(obj)
return super(UpdateStory, self).dispatch(request, *args, **kwargs)

PS: I guess it is not recommended to override dispatch. But as you have to do the check on both get and post methods, overriding dispatch will be easier.

关于django - Django UpdateView 中的对象所有权验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18172102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com