はじめに
今回はCRUD処理のひつのupdate、顧客情報を編集する機能を作成していく。
今回やること
- 詳細画面の編集ボタンをクリックしたら、顧客情報を編集する。
顧客情報の編集
編集用の関数の作成
テキストフィールドがcontrolsに直接埋め込まれていると、編集できないので名前を付けることにする。
client_detail.py
def _create_main_content(self)
"""メイン部分を作成"""
self.txt_client_cd = ft.TextField(
label="顧客CD", width=400, value=self.client.client_cd
)
self.txt_client_name = ft.TextField(
label="顧客名", width=400, value=self.client.client_name
)
self.txt_client_name_phonetic = ft.TextField(
label="ふりがな", width=400, value=self.client.client_name_phonetic
)
self.txt_client_name_alias = ft.TextField(
label="別名", width=400, value=self.client.client_name_alias
)
self.txt_president = ft.TextField(
label="代表者", width=400, value=self.client.president
)
self.txt_credit = ft.TextField(
label="与信枠", width=400, value=self.client.credit
)
self.txt_credit_reg_date = ft.TextField(
label="与信枠登録日", width=400, value=self.client.credit_reg_date
)
# 右側の列
self.txt_postal_code = ft.TextField(
label="郵便番号", width=400, value=self.client.postal_code
)
self.txt_address = ft.TextField(
label="住所", width=400, value=self.client.address
)
self.txt_phone = ft.TextField(label="TEL", width=400, value=self.client.phone)
self.txt_fax = ft.TextField(label="FAX", width=400, value=self.client.fax)
self.txt_notes = ft.TextField(
label="備考",
width=400,
multiline=True,
min_lines=3,
max_lines=5,
value=self.client.notes,
)
controlsの中のテキストフィールドを上記で付けた名前に置き換える。右側の列も同じように置き換える。
client_detail.py
def _create_main_content(self):
…
# 左側の列
ft.Column(
controls=[
self.txt_client_cd,
self.txt_client_name,
self.txt_client_name_phonetic,
self.txt_client_name_alias,
self.txt_president,
self.txt_credit,
self.txt_credit_reg_date,
]
)
下記の関数を追加する。
client_detail.py
def _update_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
client.client_name = self.txt_client_name.value
client.client_name_phonetic = self.txt_client_name_phonetic.value
client.client_name_alias = self.txt_client_name_alias.value
client.president = self.txt_president.value
client.credit = self.txt_credit.value
client.credit_reg_date = self.txt_credit_reg_date.value
client.postal_code = self.txt_postal_code.value
client.address = self.txt_address.value
client.phone = self.txt_phone.value
client.fax = self.txt_fax.value
client.notes = self.txt_notes.value
db.commit()
# 保存後、最新情報を取得し直して画面を更新
self._load_client()
self.page.update()
except Exception as ex:
db.rollback()
print([f"更新エラー:{str(ex)}"])
finally:
db.close()
この関数を保存ボタンのon_clickに設定。
client_detail.py
def _create_main_content(self):
…
# on_click関数に設定
ft.ElevatedButton(
"保存",
icon=ft.Icons.SAVE,
on_click=self._update_client,
style=ft.ButtonStyle(
shape=ft.RoundedRectangleBorder(radius=5)
),
),
試しに顧客名を編集して保存ボタンをクリックする。有限会社に修正してみた。一覧に戻って再度詳細画面に移動してみて確認。変更が保存されていれば成功。


