田植え計画機能を追加する #1
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
概要
田植え前の播種・育苗準備量を見積もるための「田植え計画」機能を追加する。
施肥計画と同様に年度単位で管理するが、同じ年度・同じ品種でも複数回に分けて苗を作れる前提とする。
計画では圃場ごとに以下を管理する。
背景
要件
データモデル
Cropに種もみ在庫(kg)を持てることVarietyに反当苗箱枚数デフォルトを持てることRiceTransplantPlanを追加し、年度・品種・計画名・苗箱1枚あたり種もみ(g)デフォルト・備考を持てることRiceTransplantEntryを追加し、圃場ごとの反当苗箱枚数と種もみg/箱を持てることRiceTransplantPlanを作成できること業務ロジック
画面
受け入れ条件
/api/plans/rice-transplant-plans/で CRUD ができる/api/plans/rice-transplant-plans/candidate_fields/で候補圃場が取得できる補足
仕様の詳細は
document/16_マスタードキュメント_田植え計画編.mdを参照。コードレビュー結果(2026-04-04)
全体評価
設計がシンプルで仕様書と整合しています。単一ユーザーのシステムとして十分な品質です。
指摘事項
1.
urls.py— 重複ルート(軽微)DRF の
@actionはurl_path = func.__name__をデフォルト使用するため、router がrice-transplant-plans/candidate_fields/を自動生成済みです。urlpatternsに追加している explicit path は冗長(include(router.urls)が先にマッチするため到達されません)。削除してください。2.
serializers.py— entries の重複シリアライズ(軽微)get_total_seedling_boxes・get_total_seed_kg・get_remaining_seed_kgがそれぞれRiceTransplantEntrySerializer(obj.entries.all(), many=True).dataを再生成しているため、1プランあたり entries が 3〜4 回シリアライズされます。39 筆のシングルユーザーでは実害は小さいですが、直接
obj.entries.all()を集計する形に変えるとシンプルになります。3.
serializers.py—_save_entriesのバリデーション欠如(軽微)存在しない
field_idを渡すとIntegrityError→ 500 になります。フロントエンドが正しい値を送ることが前提なので実害はほぼありませんが、validate()で事前チェックを追加しておくと安全です。4.
rice-transplant/page.tsx— 削除確認なし(UX)削除ボタンが confirm なしで直接 DELETE を発行します。他画面と統一するなら確認ダイアログを追加してください。
問題なし
candidate_fieldsの Plan → field 抽出types/index.ts優先順位
コードレビュー指摘のうち以下を反映しました。
backend/apps/plans/urls.pyrice-transplant-plans/candidate_fields/の重複 explicit path を削除しましたbackend/apps/plans/serializers.pytotal_seedling_boxes/total_seed_kgを entries の再シリアライズなしで直接集計するように変更しましたRiceTransplantPlanWriteSerializer.validate()を追加し、不正なfield_idを 400 で弾くようにしましたfrontend/src/app/rice-transplant/page.tsx確認:
python3 -m py_compile backend/apps/plans/serializers.py backend/apps/plans/urls.pyは通過しています残件としては、より細かい UX 改善や追加テストは未対応です。必要なら続けて詰めます。
2026-04-07 時点で実装済みを確認したためクローズします。
確認内容:
RiceTransplantPlan/RiceTransplantEntryと、作物在庫・品種デフォルト項目がモデルに追加済み/api/plans/rice-transplant-plans/の CRUD と/candidate_fields/が実装済みfrontend/src/app/rice-transplant/配下に実装済み関連確認:
backend/apps/plans/models.pybackend/apps/plans/views.pybackend/apps/plans/serializers.pyfrontend/src/app/rice-transplant/page.tsxfrontend/src/app/rice-transplant/_components/RiceTransplantEditPage.tsx