При использовании **kwargs словарь из views не был успешно передан в функцию в моделях должным образом
Я пытаюсь передать словарь в представлении в функцию в модели и использовать **kwargs для дальнейшей манипуляции тем, что я хочу сделать внутри функции. Я пытаюсь вызвать dict перед передачей его в функцию. Данные находятся там. В момент передачи 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()
для каждого параметра.