#python #flask #sqlalchemy
#python #flask #sqlalchemy
Вопрос:
Проблема
Следующие модели баз данных:
Таблица меню:
class Menu(db.Model):
__tablename__ = "menu"
id = db.Column(db.Integer(), primary_key=True)
title = db.Column(db.String())
price = db.Column(db.Integer())
vegetarian = db.Column(db.Boolean())
order = db.relationship("Order", backref="menu", lazy="dynamic")
Пользовательская таблица:
class User(db.Model):
__tablename__="users"
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(), nullable=False, unique=True)
password = db.Column(db.String(), nullable=False)
first_name = db.Column(db.String(), nullable=False)
last_name = db.Column(db.String(), nullable=False)
admin = db.Column(db.Boolean(), default=False)
order = db.relationship("Order", backref="users")
Таблица заказов
class Order(db.Model):
__tablename__ = "user_order"
id = db.Column(db.Integer, primary_key=True)
date_time = db.Column(db.DateTime(timezone=True), nullable=False, server_default=func.now())
menu_id = db.Column(db.Integer, db.ForeignKey("menu.id"), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
Проблема заключается в таблице заказов, где пользователь будет покупать / несколько товаров / и, таким образом, будет записан как транзакция в таблице заказов. Проблема в том, как я буду записывать несколько покупаемых товаров в одной транзакции без увеличения идентификатора заказа.
Например
Order Id | User Id | Menu Id| History
1. 1. 1. 11/11/11
1. 1. 2. 11/11/11
2. 1. 5. 14/11/11
В целом я хочу, чтобы у пользователя была возможность просматривать историю своих транзакций.
Есть ли способ сделать это? Есть ли более простой способ?
@order.route("/" methods=["POST"])
def order_menu():
#Something
Как я буду выполнять запрос post, заказывая более 1 элемента?
Ответ №1:
Я сделал нечто подобное всего несколько дней назад, я начал работать в компании моих друзей, ему нужна была помощь с ИТ-материалами. Я вставлю вам код моей модели (его тихие спагетти спешили, пришлось закончить систему заказа менее чем за 8 часов …)
class Article(db.Model):
__tablename__ = 'articles'
id = db.Column(db.Integer , primary_key=True)
name = db.Column(db.String, unique=True)
type = db.Column(db.String)
class Order(db.Model):
__tablename__ = 'orders'
id = db.Column(db.Integer, primary_key=True)
bn = db.Column(db.String)
commission = db.Column(db.String)
week = db.Column(db.String)
date = db.Column(db.String)
napomena = db.Column(db.TEXT)
hitno = db.Column(db.Boolean, default=False)
placement = db.relationship('Placement', cascade="all, delete, delete-orphan")
class Placement(db.Model):
__tablename__ = 'placements'
id = db.Column(db.Integer, primary_key=True)
qty = db.Column(db.Integer)
name = db.Column(db.String)
order_id = db.Column(db.Integer, db.ForeignKey('orders.id'))
Итак, вот в чем дело, мне нужно было то же самое, чего можно было достичь другим способом, но это был самый простой способ, который я придумал. Итак, у меня есть модельная СТАТЬЯ (в которой представлены общие товары, которые будут продаваться), затем у меня есть порядок таблиц, который связан с размещением таблицы, в котором сохраняется название товара и количество. Позже я просто запрашиваю order и вызываю order.placement, чтобы просмотреть все элементы, связанные с одним заказом.
Надеюсь, вы понимаете мой пример, я думаю, что его аналогия для вас тоже довольно похожа..
Удачи!
Комментарии:
1. Это здорово! <3 Я просто хочу знать, как вставить заказ с более чем 1 элементом в одну транзакцию в post-запросе (с использованием flask). У вас есть какие-либо идеи?
2. О, извините, я не указал на это, я сделал то, что сначала сохранил ЗАКАЗ и использовал последний идентификатор из запроса, чтобы добавить отношение элементов к одеру. Но в вашем случае это не сработает, может быть, просто создайте сеанс с идентификатором заказа и используйте его для сохранения меню для заказа, а затем очистите сеанс после фиксации?
3. О, теперь я понял, интересно, я проведу еще несколько исследований о том, как это сделать, спасибо! Теперь я знаю, где искать по крайней мере <3
4. Нет проблем, чувак, да, поиск сеанса flask — тихая мощная вещь.