Files
keinasystem/backend/apps/plans/models.py
Akira 530e31f9b5 Day 3 のデータモデル実装が完了しました。
完了内容
models.py
fields/models.py:
- OfficialKyosaiField - 共済マスタ
- OfficialChusankanField - 中山間マスタ
- Field - 圃場(PointField で位置情報対応)
plans/models.py:
- Crop - 作物マスタ
- Variety - 品種マスタ(unique_together 制約)
- Plan - 作付け計画(unique_together 制約)
admin.py
- 全てのモデルを admin に登録
- list_display, search_fields, list_filter 設定
- FieldAdmin は GIS 用 GISModelAdmin を使用
マイグレーション
 makemigrations - 成功
 migrate - 成功
管理画面 (http://localhost:8000/admin) で全てのモデルが確認・編集できます。
2026-02-15 11:47:15 +09:00

44 lines
1.5 KiB
Python

from django.db import models
from apps.fields.models import Field
class Crop(models.Model):
name = models.CharField(max_length=100, unique=True, verbose_name="作物名")
class Meta:
verbose_name = "作物マスタ"
verbose_name_plural = "作物マスタ"
def __str__(self):
return self.name
class Variety(models.Model):
crop = models.ForeignKey(Crop, on_delete=models.CASCADE, related_name='varieties', verbose_name="作物")
name = models.CharField(max_length=100, verbose_name="品種名")
class Meta:
verbose_name = "品種マスタ"
verbose_name_plural = "品種マスタ"
unique_together = [['crop', 'name']]
def __str__(self):
return f"{self.crop.name} - {self.name}"
class Plan(models.Model):
field = models.ForeignKey(Field, on_delete=models.CASCADE, related_name='plans', verbose_name="圃場")
year = models.IntegerField(verbose_name="作付年度")
crop = models.ForeignKey(Crop, on_delete=models.CASCADE, related_name='plans', verbose_name="作物")
variety = models.ForeignKey(Variety, on_delete=models.CASCADE, related_name='plans', verbose_name="品種")
notes = models.TextField(blank=True, null=True, verbose_name="備考")
class Meta:
verbose_name = "作付け計画"
verbose_name_plural = "作付け計画"
unique_together = [['field', 'year']]
ordering = ['-year', 'field']
def __str__(self):
return f"{self.field.name} - {self.year} - {self.crop.name}"