Django 通用视图,检查请求是否与创建者在同一组中
Django generic view, check if request is in the same group as creator
我正在寻找一种方法来检查用户组,当请求用户与创建者在同一组中时,然后访问,如果不在,则访问被拒绝。
这背后的原因是并非每个工作人员都可以编辑所有贡献。只有工作人员与作者在同一组,工作人员才可以编辑文章。
我的看法:
class EditArticleView(LoginRequiredMixin, UpdateView):
model = Article
message = _("Your Article has been updated.")
form_class = ArticleForm
template_name = 'articles/article_update.html'
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
def get_success_url(self):
messages.success(self.request, self.message)
return reverse('articles:list')
'''
def get_queryset(self):
queryset = super(EditArticleView, self).get_queryset()
queryset = queryset.filter(user=self.request.user)
print(self.request.user)
return queryset
'''
作为替代方案,您也可以考虑使用 docs:
中所述的 UserPassesTest 混合
from django.contrib.auth.mixins import UserPassesTestMixin
class EditArticleView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
def test_func(self):
article = self.model.objects.get(pk=self.kwargs['pk'])
return Group.objects.filter(user=self.request.user).filter(user=article.author).exists() # Or any other test you need
# ... Your other view code
我正在寻找一种方法来检查用户组,当请求用户与创建者在同一组中时,然后访问,如果不在,则访问被拒绝。
这背后的原因是并非每个工作人员都可以编辑所有贡献。只有工作人员与作者在同一组,工作人员才可以编辑文章。
我的看法:
class EditArticleView(LoginRequiredMixin, UpdateView):
model = Article
message = _("Your Article has been updated.")
form_class = ArticleForm
template_name = 'articles/article_update.html'
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
def get_success_url(self):
messages.success(self.request, self.message)
return reverse('articles:list')
'''
def get_queryset(self):
queryset = super(EditArticleView, self).get_queryset()
queryset = queryset.filter(user=self.request.user)
print(self.request.user)
return queryset
'''
作为替代方案,您也可以考虑使用 docs:
中所述的 UserPassesTest 混合from django.contrib.auth.mixins import UserPassesTestMixin
class EditArticleView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
def test_func(self):
article = self.model.objects.get(pk=self.kwargs['pk'])
return Group.objects.filter(user=self.request.user).filter(user=article.author).exists() # Or any other test you need
# ... Your other view code