Commit Graph

10 Commits

Author SHA1 Message Date
Akira
1b02fd6f13 今回の変更
C-2: 共済マスタ unique 制約修正

models.py: k_num 単独unique → (k_num, s_num) ペアunique に変更
s_num を null=True → default='' に変更(unique_together で null は扱いにくいため)
views.py: インポート時のルックアップを k_num 単独 → (k_num, s_num) ペアに修正
C-4: 面積フィールド m2 統一

models.py: 共済・中山間両方の area を DecimalField(ha) → IntegerField(m2) に変更
payment_amount も DecimalField → IntegerField に統一
views.py: インポート時の area 値を int() で変換
types/index.ts: TypeScript型を string → number に更新
A-8: 圃場詳細に共済/中山間情報表示

fields/[id]/page.tsx: 編集フォームの下に共済情報テーブル・中山間情報テーブルを追加
壊れていたJSX(重複フラグメント)も修正
追加修正

FieldViewSet の AllowAny → IsAuthenticated に変更(D-4 の漏れ)
マイグレーション 0005 を作成
注意事項
Docker起動後に python manage.py migrate が必要です
既存の共済/中山間データがある場合、area の値は DecimalField → IntegerField に変換されます(既にm2で保存されているはずなので小数点以下が切り捨てられるだけ)
2026-02-17 13:57:02 +09:00
Akira
9c21caa017 見直し前の最終 2026-02-16 13:45:16 +09:00
Akira
0edfaef71f 修正完了
修正内容
1. 実圃場データ (import_yoshida_fields)
- clean_int_str() ヘルパー関数を追加
- .0 サフィックスの除去対応
- 中山間_ID のカンマ区切り対応(配列分割して処理)
- 複数の中山間マスタへの紐付け対応
def clean_int_str(val):
    if pd.isna(val):
        return None
    s = str(val).strip()
    if not s:
        return None
    if s.endswith('.0'):
        s = s[:-2]
    return s
# "61,62" -> ["61", "62"] をループで処理
2. 中山間マスタ (import_chusankan_master)
- 数字を含まないID((合計外) 等)をスキップ
- 交付金額の安全な数値変換
if not any(char.isdigit() for char in c_id):
    continue  # スキップ
バックエンドを再起動しました。再度テストしてみてください。
2026-02-15 14:27:36 +09:00
Akira
987b7572b7 下記の通りお返事きましたので、実データでテストしてください。 2026-02-15 14:19:15 +09:00
Akira
58be8c72f8 修正完了
backend/apps/fields/views.py を修正しました:
修正内容
1. 共済マスタ取込 (import_kyosai_master)
- k_num → 耕地番号
- s_num → 分筆番号
- address → 地名 地番
- kanji_name → 漢字地名
- area → 本地面積(m2)
2. 実圃場データ取込 (import_yoshida_fields)
- name → 名称
- address → 住所
- area_tan → 面積(反)
- area_m2 → 面積(反) * 1000 (自動計算)
- owner_name → 地主
- raw_kyosai_k_num → 細目_耕地番号
- raw_kyosai_s_num → 細目_分筆番号
- raw_chusankan_id → 中山間_ID
3. 追加した堅牢化
- df.columns = df.columns.str.strip() でカラム名の余白を除去
バックエンドを再起動しました。再度インポートを実行してみてください。
2026-02-15 14:12:50 +09:00
Akira
923dd5dece Day 9 完了
実装内容:
1. backend/apps/fields/views.py - FieldViewSetをModelViewSetに変更(書き込み可能)
2. frontend/src/components/Navbar.tsx - 圃場管理リンク追加
3. frontend/src/app/fields/page.tsx - 圃場一覧画面
4. frontend/src/app/fields/new/page.tsx - 新規作成画面
5. frontend/src/app/fields/[id]/page.tsx - 編集画面
API CRUDテスト結果:
- POST /api/fields/ → 201 Created
- GET /api/fields/ → 200 OK
- PATCH /api/fields/{id}/ → 200 OK
- DELETE /api/fields/{id}/ → 204 No Content
ブラウザで http://localhost:3000/fields から圃場のCRUD操作が可能です。
次の工程に移りますか?
2026-02-15 13:34:32 +09:00
Akira
afd434cd4c Day 8 完了
実装内容:
1. frontend/src/types/index.ts - 型定義(Field, Crop, Variety, Plan)
2. frontend/src/components/Navbar.tsx - ナビゲーションバー(ログアウトボタン)
3. backend/apps/fields/views.py - FieldViewSet追加
4. backend/apps/fields/serializers.py - 新規作成(Fieldシリアライザー)
5. backend/apps/fields/urls.py - ViewSetルート追加
6. frontend/src/app/allocation/page.tsx - 作付け計画画面(作物・品種選択可能)
7. frontend/src/app/page.tsx - 自動リダイレクト(ログイン状態による)
API動作確認:
- /api/fields/ → HTTP 200(圃場データなし)
- /api/plans/crops/ → HTTP 200(2作物:水稲・大豆)
- /api/plans/?year=2025 → HTTP 200
テスト: http://localhost:3000/ → 自動リダイレクトで /login または /allocation
※ 現在圃場データがないため、画面には「圃場データがありません。インポートを実行してください。」と表示されます。
次の工程に移りますか?
2026-02-15 13:23:40 +09:00
Akira
543de30b1c Day 5 の作付け計画API実装が完了しました。
実装内容
バグ修正
- fields/views.py: OfficialChusakanField → OfficialChusankanField
init_crops コマンド
 python manage.py init_crops
水稲: 5 varieties
大豆: 3 varieties
小麦: 2 varieties
そば: 2 varieties
とうきび: 1 varieties
serializers.py
- CropSerializer - 作物マスタ
- VarietySerializer - 品種マスタ
- PlanSerializer - 作付け計画(crop_name, variety_name, field_name 付き)
views.py
- CropViewSet, VarietyViewSet, PlanViewSet
- アクション: summary, copy_from_previous_year, get_crops_with_varieties
API エンドポイント
- /api/plans/crops/ - 作物一覧
- /api/plans/varieties/ - 品種一覧
- /api/plans/ - 作付け計画CRUD
- /api/plans/summary/?year=2025 - 集計
テスト結果
GET /api/plans/crops/ → 
GET /api/plans/ →  (空配列)
2026-02-15 12:10:38 +09:00
Akira
d30125d0a1 Day 4 のデータインポート機能実装が完了しました。
実装内容
views.py
- import_kyosai_master - 共済マスタのODSファイルをインポート
- import_yoshida_fields - 実圃場のODSファイルをインポート
urls.py
- /api/fields/import/kyosai/ - 共済マスタ用エンドポイント
- /api/fields/import/yoshida/ - 実圃場用エンドポイント
Many-to-Many 紐付け
field.kyosai_fields.add(kyosai_record)
field.chusankan_fields.add(chusankan_record)
.add() を使用して累積的に関連付けを追加しています。
動作確認
 POST /api/fields/import/kyosai/ → {"error": "No file uploaded"}
 POST /api/fields/import/yoshida/ → {"error": "No file uploaded"}
ODSファイルをPOSTすればインポートが始まります。
2026-02-15 12:00:30 +09:00
Akira
9ab5f0b814 【Day 2 完了報告】
完了したタスク
Day 2: Djangoセットアップ
成果物
requirements.txt (packages added)
settings.py (configured)
apps/fields, apps/plans, apps/reports (directories created)
レビュー結果
 良い点:

必要なライブラリが適切に追加されました(pandas, PostGIS等)。
settings.py の設定変更(INSTALLED_APPS, DATABASES, REST_FRAMEWORK)が正しく行われています。
アプリケーション構成も指示通りです。
次のステップ
Day 3: データモデル実装(Fields, Plansアプリのモデル作成)
2026-02-15 11:43:22 +09:00