使用 **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=...
。
我假设 bookedData
和 customerID
是 request.data
中的键。要将这些键作为关键字参数传递,请使用 **
运算符:
isAvailable(**request.data)
除此更改外,您还可以显式声明参数:
def isAvaialble(bookedDate, customerId, cpId):
pass
请注意,这比为每个参数调用 kwargs.get()
代码要少得多。
我正在尝试将视图中的字典传递给模型中的函数,并使用 **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=...
。
我假设 bookedData
和 customerID
是 request.data
中的键。要将这些键作为关键字参数传递,请使用 **
运算符:
isAvailable(**request.data)
除此更改外,您还可以显式声明参数:
def isAvaialble(bookedDate, customerId, cpId):
pass
请注意,这比为每个参数调用 kwargs.get()
代码要少得多。