@violpeople

Как использовать внесенные данные в state в других функциях?

Всем привет, бот на aiogram и вот у меня вопрос, который задал выше. Зачем мне это надо - я создал маленькую регистрацию клиента - Имя, фамилия, номер телефона и тд, которые добавляются в БД:
@dp.message_handler(state=reg.login, content_types=types.ContentTypes.TEXT)
async def reg_password(message:types.Message,state:FSMContext):
    if any(map(str.isdigit, message.text)):
        await message.reply("Повторите попытку")
        return
    await state.update_data(name_user = message.text)
    await message.answer("Отлично, будем знакомы!\n\nСледующий шаг - введите место, откуда вы(куда везти товар):")
    await reg.place.set()


@dp.callback_query_handler(text = 'yes',state = reg.last)
async def yes_message(call:types.CallbackQuery, state:FSMContext):
    await call.message.reply('Добро пожаловать в магазин "Мир Цветов".\nНажмите /help для дальнейших действий')
    
    user_data = await state.get_data()
    name = user_data["name_user"]
    place = user_data["place_user"]
    phone = user_data["phone_user"]
    print(name, place, phone)
    
    user = [name, place, phone]
    cur = con.cursor()
    cur.executemany('INSERT INTO users (user_name, user_place, user_phone) VALUES (?, ?, ?)',(user,))

    con.commit()
    await state.finish()

Дальше у меня есть функция добавления в ту же БД товара, который заказал клиент:
@dp.callback_query_handler(lambda c: c.data.startswith('add_'),state = '*")
async def add_to_cart(call: types.CallbackQuery, state:FSMContext):
    operation = call.data.split('_')[0]
    current_item = int(call.data.split('_')[-1])
    item = items[current_item]
    prices = price[current_item]

    user_data = await state.get_data()
    name = user_data["name_user"]
    print(f"Имя - {user_data['name_user']}")
    
    cur = con.cursor()
    cur.execute(' INSERT INTO users(user_item) VALUES (item) WHERE user_name = name ')

И вот дальше я не понимаю - мне надо привязать этот товар к определенному человеку, который только что зарегался, а когда я пытаюсь таким способом вытянуть из State's его имя, чтобы потом пришить эти товары к этому человеку в БД - ошибка

print(f"Имя - {user_data['name_user']}")
KeyError: 'name_user'
  • Вопрос задан
  • 460 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Filiuss
В функции yes_message последняя строка "await state.finish()"
Finish сбрасывает текущее состояние и удаляет все хранящиеся данные, поэтому и не получается дальше их использовать. В строке user_data = await state.get_data() ничего не возвращается
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы