Нужна помощь в создании системы упорядочения (postgres, flask-sqlalchemy)

#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 — тихая мощная вещь.