65 lines
1.6 KiB
Python
65 lines
1.6 KiB
Python
from rest_framework import serializers
|
|
|
|
from .models import Plant
|
|
|
|
|
|
DEFAULT_PLANT_GROWTH_STAGES = [
|
|
"initial",
|
|
"vegetative",
|
|
"flowering",
|
|
"fruiting",
|
|
"maturity",
|
|
]
|
|
|
|
|
|
def normalize_growth_stage_values(plant: Plant) -> list[str]:
|
|
stages: list[str] = []
|
|
|
|
raw_stage = (plant.growth_stage or "").replace("،", ",")
|
|
for part in raw_stage.split(","):
|
|
value = part.strip()
|
|
if value and value not in stages:
|
|
stages.append(value)
|
|
|
|
stage_thresholds = plant.growth_profile.get("stage_thresholds", {})
|
|
if isinstance(stage_thresholds, dict):
|
|
for stage_name in stage_thresholds.keys():
|
|
value = str(stage_name).strip()
|
|
if value and value not in stages:
|
|
stages.append(value)
|
|
|
|
if not stages:
|
|
stages = list(DEFAULT_PLANT_GROWTH_STAGES)
|
|
|
|
return stages
|
|
|
|
|
|
class PlantSerializer(serializers.ModelSerializer):
|
|
"""سریالایزر خروجی / ورودی برای Plant."""
|
|
|
|
class Meta:
|
|
model = Plant
|
|
fields = [
|
|
"id",
|
|
"name",
|
|
"icon",
|
|
"light",
|
|
"watering",
|
|
"soil",
|
|
"temperature",
|
|
"growth_stage",
|
|
"planting_season",
|
|
"harvest_time",
|
|
"spacing",
|
|
"fertilizer",
|
|
"created_at",
|
|
"updated_at",
|
|
]
|
|
read_only_fields = ["id", "created_at", "updated_at"]
|
|
|
|
|
|
class PlantNameStageSerializer(serializers.Serializer):
|
|
name = serializers.CharField()
|
|
icon = serializers.CharField()
|
|
growth_stages = serializers.ListField(child=serializers.CharField())
|