使用带有 def 的 mixin

问题描述

我在 generic.views 上使用这个 Accessmixin:

class OrganisorAndLoginrequiredMixin(AccessMixin):
    """Verify that the current user is authenticated and is an organisor."""
    def dispatch(self,request,*args,**kwargs):
        if not request.user.is_authenticated or not request.user.is_organisor:
            return redirect("home")
        return super().dispatch(request,**kwargs)

我想在 def 上使用它。我试过了,但出现以下错误

@OrganisorAndLoginrequiredMixin()
def AgentUpdateView(request,pk):
    obj = Agent.objects.filter(pk=pk).first()
    if obj is None:
        return render(request,"404.html",{
            "Instance": pk
        })
    else:
        form = AgentModelForm(instance=obj.user)

错误: 类型错误:'OrganisorAndLoginrequiredMixin' 对象不可调用

解决方法

您需要为此使用 class based view

from django.views.generic.edit import UpdateView


class AgentUpdateView(OrganisorAndLoginRequiredMixin,UpdateView):
    model = Agent
    template_name = 'template.html'
    form_class = AgentModelForm