Как взять значение из словаря в функции
Через aoigram и fsmcontext записываю дату введенную пользователем в формате isoweekday()(Понедельник - 1, вторник - 2 ... и тд) в словарь. До этого создал этот словарь current_data и получается, что через current_data = state.set_state() обновляю значение на введенное пользователем. Дальше нужно сделать проверку типа if '1' in current_data:... И так от 1 до 7, в зависимости от того, какой день недели будет в веденную дату. Но при проверке оператор смотрит на словарь, ранее заданный как dict() с пустыми значениями. Как можно взять словарь из функции, и дальше работать с ним? Пытался сделать current_data глобальным но не работает.
class Vvod(StatesGroup):
data = State()
data1 = State()
current_data = dict()
@router.message(Vvod.data)
async def dostal_datu(message: Message, state: FSMContext):
data1 = message.text
correctdate = None
for funcs in range(0, 1):
try:
global poluch1
poluch1 = DT.datetime.strptime(data1, '%d-%m-%Y')
correctdate = 'Спасибо, дата введена успешно'
if correctdate == 'Спасибо, дата введена успешно':
poluchosn = poluch1.isoweekday()
await state.update_data(data1=str(poluchosn))
await message.answer(str(correctdate))
global current_data
current_data = await state.get_data()
await state.clear()
#ухожу с цикла на следующий state
await state.set_state(Vvod.data1)
except ValueError:
correctdate = 'Не верный формат даты, необходимо ДД-ММ-ГГГГ, введите дату еще раз:'
await message.answer(str(correctdate))
#При неправильном вводе даты перехожу в начало
await state.set_state(Vvod.data)
@router.message(Vvod.data1)
async def next(message: Message, state: FSMContext):
if '1' in current_data:
await message.answer('Значение равно 1')
else:
await message.answer('такого значения нет')
Ответы (1 шт):
Вы можете передавать данные через саму машину состояний. Сделать это достаточно просто, для этого в FSMContext
существует метод update_data()
. Он позволяет записать необходимые данные, а с помощью get_data()
вы сможете получить необходимые данные в другой функции.
Вы можете сохранить необходимые вам данные таким образом:
@router.message(Vvod.data)
async def dostal_datu(message: Message, state: FSMContext):
data1 = message.text
await state.update_data(important_data=data1)
await state.set_state(Vvod.data1)
@router.message(Vvod.data1)
async def next(message: Message, state: FSMContext):
my_important_data = await state.get_data().get("important_data", "something_else")
if my_important_data == "1":
await message.answer('Значение равно 1')
await state.clear()
else:
await message.answer('такого значения нет')