Да, вы можете просто передать ID заказа в вашу функцию, чтобы связать элемент корзины с конкретным заказом. Для этого вам нужно будет немного изменить структуру вашей функции, чтобы включить внешний ключ.
Предположим, что у вас есть две модели — `Order` и `ItemInBasket`. Модель `ItemInBasket` должна иметь внешний ключ, который ссылается на `Order`. Например:
```python
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Order(Base):
__tablename__ = 'orders'
id = Column(Integer, primary_key=True)
items = relationship('ItemInBasket', back_populates='order')
class ItemInBasket(Base):
__tablename__ = 'items_in_basket'
id = Column(Integer, primary_key=True)
tg_id = Column(Integer)
category = Column(String)
order_id = Column(Integer, ForeignKey('orders.id'))
order = relationship('Order', back_populates='items')
```
Теперь, чтобы добавить элемент в корзину и связать его с определенным заказом, вы можете обновить вашу функцию `add_item_basket`, чтобы она принимала `order_id` как дополнительный параметр:
```python
async def add_item_basket(tg_id: int, category: str, order_id: int):
async with async_session() as session:
item = ItemInBasket(tg_id=tg_id, category=category, order_id=order_id)
session.add(item)
await session.commit()
```
В этой версии функции вы просто создаёте новый объект `ItemInBasket`, передавая `order_id`, который будет использоваться как внешний ключ, указывающий на соответствующий заказ.
Вот шаги, которые выполняет этот код:
1. Создается новый объект `ItemInBasket`, указывая необходимые параметры, включая `order_id`.
2. Этот объект добавляется в сессию с помощью метода `session.add(item)`.
3. Изменения сохраняются в базе данных с помощью `await session.commit()`.
Убедитесь, что перед тем, как добавлять элемент, вы проверили, что `order_id` существует в таблице `orders`, чтобы избежать ошибок ссылочной целостности.