在 Django 中使用装饰器时得到一个意外的关键字参数 'pk'

got an unexpected keyword argument 'pk' when use decorator in django

我想 运行 在视图的调度方法之前使用装饰器函数

下面是我的decorators.py

from django.urls import reverse
from django.shortcuts import render
from django.shortcuts import redirect

def check_point(point=None):
  def decorator(view_func):
    def wrap(request, *args, **kwargs):
      price = point or request.get_object().price
      if request.user.point.get_point() >= price:
        return view_func(request, *args, **kwargs)
    return wrap
  return decorator

和我的查看代码

@method_decorator(check_point, name='dispatch')
class CheckWinningView(SingleObjectMixin, RedirectView):
  model = Product

但是当我 运行 代码时,出现以下错误:

我不确定为什么会收到此错误。

我知道由于singleobjectmixin的特性,'pk'必须无条件输入

我该如何解决?

修饰函数的时候需要调用check_point函数,所以:

#            call check_point ↓
@method_decorator(check_point<b>()</b>, name='dispatch')
class CheckWinningView(SingleObjectMixin, RedirectView):
  model = Product

call_checkpoint() 将 return decorator 函数,并将作为装饰器应用于方法。

为了装饰基于 class 的视图,通常使用 mixin 而不是装饰器,例如 LoginRequiredMixin [Django-doc] 来防止人们如果他们没有登录,则无法看到页面。