顧客管理ソフトの作成 – 第5回

はじめに

今回はCRUD処理のひつのdelete、顧客情報を削除する機能を作成していく。

今回やること

  • 詳細画面の削除ボタンをクリックしたら、顧客情報を削除
  • 削除後に一覧画面を表示する

顧客情報の削除

削除用の関数の作成

下記の関数を追加。

client_detail.py

def _delete_client(self, e):
        """顧客をデータベースから削除"""
        db = SessionLocal()
        try:
            # データベースから既存の顧客を取得
            client = db.query(Client).filter(Client.id == self.client_id).first()
            if not client:
                print([f"顧客が見つかりません (ID={self.client_id})"])
                return

            # データベースから削除
            db.delete(client)
            db.commit()            

        except Exception as ex:
            db.rollback()
            print([f"削除エラー:{str(ex)}"])
        finally:
            db.close()

この関数を削除ボタンのon_clickに設定。

削除ボタンの名前が間違えていたので修正。

正:self.bnt_delete_client

誤:self.bnt_new_client

client_detail.py

def _create_header(self):
…
# ボタン名修正とon_click関数に設定
self.bnt_delete_client = ft.ElevatedButton(
            "削除",
            icon=ft.Icons.DELETE,
            on_click=self._delete_client,
            style=ft.ButtonStyle(shape=ft.RoundedRectangleBorder(radius=5)),
        )
…

# ボタン名修正
self.header = ft.Row(
            controls=[self.back_to_list, self.title, self.bnt_delete_client]
        )

削除ボタンをクリック。画面変化はないが、一覧ボタンに戻り顧客が削除されていれば成功。

次に、削除後に自動で一覧に戻る処理を追加。

client_detail.py

db.commit()

 # 一覧画面に戻る
 self.page.go("/client/list")

削除後に一覧に戻れば成功。

エラー処理の確認

削除処理がうまくできなかった場合の例外処理が作動するかのチェックをする。そのためコミットの前に強制的にエラーを発生させるコードを追加する。

client_detail.py

db.delete(client)
raise RuntimeError("削除エラーテスト")  # 追加
db.commit()

ターミナルにメッセージが出れば成功。

追加したコードは不要なのでコメントアウトしておく。