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