При использовании **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() для каждого параметра.

Вернуться на верх