使用 **kwargs,来自视图的字典没有成功地正确传递给模型中的函数

Using **kwargs, a dictionary from views was not successfully pass to a function in models properly

我正在尝试将视图中的字典传递给模型中的函数,并使用 **kwargs 进一步操纵我想在函数内部执行的操作。我尝试在将 dict 传递给函数之前先调用它。数据就在那里。字典传递给函数 (isAvailable) 的那一刻,kwargs 是空的。

这是来自 views.py 的代码片段。

def bookingAvailable(request):
    available = isAvailable(data=request.data)

这是来自 models.py

的代码片段
def isAvailable(**kwargs):
    bookedDate = kwargs.get('bookedDate')
    customerID = kwargs.get('customerID')
    cpID = kwargs.get('cpID')

request.data 以字典形式填充数据。但是当它进入 **kwargs 的那一刻,一切都消失了。不太确定中间会发生什么。感谢您的帮助!

您应该首先从 kwargs 获取数据字典,然后从数据字典获取字段:

def isAvailable(**kwargs):
  data = kwargs.get('data')
  bookedDate = data.get('bookedDate')
  customerID = data.get('customerID')
  cpID = data.get('cpID')

当您执行 isAvailable(data=request.data) 时,kwargs 将被分配一个类似于

的字典
{
    "data": ...
}

请注意,没有键 "bookedDate""customerID",因为您在调用中明确指定了 data=...

我假设 bookedDatacustomerIDrequest.data 中的键。要将这些键作为关键字参数传递,请使用 ** 运算符:

isAvailable(**request.data) 

除此更改外,您还可以显式声明参数:

def isAvaialble(bookedDate, customerId, cpId):
    pass

请注意,这比为每个参数调用 kwargs.get() 代码要少得多。