Files
keinasystem/backend/apps/fields/serializers.py
Akira 64e7701456 実装サマリー
バックエンド(3ファイル変更)
ファイル	変更内容
views.py	OfficialKyosaiFieldViewSet、OfficialChusankanFieldViewSet(ReadOnly)、紐づけ追加/解除の4つのAPIビューを追加
urls.py	紐づけ管理用の4パス追加
serializers.py	linked_field_namesフィールドを追加(紐づけ先の圃場名を返す)
keinasystem/urls.py	/api/kyosai-fields/、/api/chusankan-fields/ をルーターに登録
新規API一覧
メソッド	エンドポイント	動作確認
GET	/api/kyosai-fields/	31件返却
GET	/api/chusankan-fields/	71件返却
POST	/api/fields/{id}/kyosai-links/	{"added":1}
DELETE	/api/fields/{id}/kyosai-links/{kyosai_id}/	204
POST	/api/fields/{id}/chusankan-links/	同上
DELETE	/api/fields/{id}/chusankan-links/{chusankan_id}/	同上
フロントエンド(3ファイル変更)
ファイル	変更内容
types/index.ts	linked_field_namesプロパティ追加
fields/[id]/page.tsx	紐づけ管理UI全面実装(+追加ボタン、x解除ボタン、検索付きモーダル、面積参考表示)
fields/page.tsx	「共済」「中山間」紐づけ件数列を追加
http://localhost:3000/fields/4 などで圃場詳細画面を開いて動作確認できます。
2026-02-18 14:02:40 +09:00

37 lines
1.5 KiB
Python

from rest_framework import serializers
from .models import Field, OfficialKyosaiField, OfficialChusankanField
class OfficialKyosaiFieldSerializer(serializers.ModelSerializer):
linked_field_names = serializers.SerializerMethodField()
class Meta:
model = OfficialKyosaiField
fields = ['id', 'k_num', 's_num', 'address', 'kanji_name', 'area', 'linked_field_names']
def get_linked_field_names(self, obj):
return list(obj.fields.values_list('name', flat=True))
class OfficialChusankanFieldSerializer(serializers.ModelSerializer):
linked_field_names = serializers.SerializerMethodField()
class Meta:
model = OfficialChusankanField
fields = ['id', 'c_id', 'chusankan_flag', 'oaza', 'aza', 'chiban', 'branch_num',
'land_type', 'area', 'planting_area', 'original_crop', 'manager', 'owner',
'slope', 'base_amount', 'steep_slope_addition', 'smart_agri_addition',
'payment_amount', 'linked_field_names']
def get_linked_field_names(self, obj):
return list(obj.fields.values_list('name', flat=True))
class FieldSerializer(serializers.ModelSerializer):
kyosai_fields = OfficialKyosaiFieldSerializer(many=True, read_only=True)
chusankan_fields = OfficialChusankanFieldSerializer(many=True, read_only=True)
class Meta:
model = Field
fields = ['id', 'name', 'address', 'area_tan', 'area_m2', 'owner_name', 'group_name', 'display_order', 'kyosai_fields', 'chusankan_fields']