11-Flask

Flask(Part.34)| 【注文管理アプリケーションのプログラミング(8)l(7)の解説】

python| まとめ | 現役エンジニア&プログラミングスクール講師「python」のまとめページです。pythonに関して抑えておきたい知識や文法やにについて記事をまとめています。まとめページの下部には「おすすめの学習書籍」「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中...

目標

  • 注文処理機能に追加した会計ボタンの処理を理解できる。

注文管理アプリケーションの作成

注文処理機能に追加した会計ボタンの処理

前回の記事では、注文処理機能に会計ボタンを追加しました。機能としては、会計ボタンをクリックすると、全てのメニューを選択できなくなり、追加の注文を行えなくなるものでした。また、再度、ボタンをクリックすると、注文を再開できるように構築しました。

ここでは、ルートの前に、変更のあったモデルの内容について確認します。

注文管理アプリケーションのプログラミング

models.py(ordersapp内)

models.pyファイルを次のように編集しました。

from apps.common.db import db


# 伝票(Bill)モデル
class Bill(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    status = db.Column(
        db.String(20), default="Order in progress"
    )  # 伝票のステータス(Order in progress, pending, paid)
    table_id = db.Column(
        db.Integer, db.ForeignKey("table.id"), nullable=False
    )  # テーブルとの関連
    orders = db.relationship("Order", backref="bill", lazy=True, cascade="all, delete")

    table = db.relationship(
        "Table", backref="bill_table", uselist=False, overlaps="table,table"
    )  # 1つのテーブルに1つの伝票

    def __repr__(self):
        return f"<Bill {self.id} - Status: {self.status}>"


# 注文(Order)モデル
class Order(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    table_id = db.Column(db.Integer, db.ForeignKey("table.id"), nullable=False)
    bill_id = db.Column(db.Integer, db.ForeignKey("bill.id"), nullable=True)
    product_id = db.Column(db.Integer, db.ForeignKey("product.id"), nullable=False)
    product_name = db.Column(db.String(100), nullable=False)
    quantity = db.Column(db.Integer, nullable=False)
    total = db.Column(db.Float, nullable=False)  # Float に変更

    table = db.relationship("Table", backref="orders", lazy=True)
    product = db.relationship("Product", backref="orders", lazy=True)

    def __repr__(self):
        return f"<Order {self.id} - Table {self.table_id} - {self.product_name} x {self.quantity}>"
    status = db.Column(
        db.String(20), default="Order in progress"
    )  # 伝票のステータス(Order in progress, pending, paid)

ここでは、statusを作成して、初期値を「Order in progress」としています。これを利用して、会計ボタンが押された場合に、追加注文を行えないようにしています。

  • Order in progress…注文時のステータス
  • pending…会計時のステータス
  • paid…会計後のステータス(管理者が会計処理を行った後のステータス)
orders = db.relationship("Order", backref="bill", lazy=True, cascade="all, delete")

orders は Bill に関連する Order のリスト になります(1つの伝票に複数の注文が紐づく)。

backref=”bill” により、Order 側から order.bill で対応する伝票(Bill)にアクセスを可能にしています。

この続きはNoteとなります。

今回は以上になります。

「python」おすすめ書籍 ベスト3 | 現役エンジニア&プログラミングスクール講師「python」の学習でお勧めしたい書籍をご紹介しています。お勧めする理由としては、考え方、イメージなどを適切に捉えていること、「生のpython」に焦点をあてて解説をしている書籍であることなどが理由です。勿論、この他にも良い書籍はありますが、特に質の高かったものを選んで記事にしています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST