Files
Ai/location_data/serializers.py
T

77 lines
2.2 KiB
Python
Raw Normal View History

from rest_framework import serializers
from .models import SoilDepthData, SoilLocation
class SoilDataRequestSerializer(serializers.Serializer):
"""سریالایزر ورودی: lon و lat برای درخواست داده خاک."""
lon = serializers.DecimalField(max_digits=9, decimal_places=6, required=True)
lat = serializers.DecimalField(max_digits=9, decimal_places=6, required=True)
class SoilDepthDataSerializer(serializers.ModelSerializer):
"""سریالایزر خروجی برای هر عمق خاک."""
class Meta:
model = SoilDepthData
fields = [
"depth_label",
"bdod",
"cec",
"cfvo",
"clay",
"nitrogen",
"ocd",
"ocs",
"phh2o",
"sand",
"silt",
"soc",
"wv0010",
"wv0033",
"wv1500",
]
class SoilLocationResponseSerializer(serializers.ModelSerializer):
"""سریالایزر خروجی برای SoilLocation همراه با depths."""
lon = serializers.DecimalField(
source="longitude",
max_digits=9,
decimal_places=6,
read_only=True,
)
lat = serializers.DecimalField(
source="latitude",
max_digits=9,
decimal_places=6,
read_only=True,
)
depths = serializers.SerializerMethodField()
class Meta:
model = SoilLocation
fields = ["id", "lon", "lat", "depths"]
def get_depths(self, obj):
from .tasks import DEPTHS
depth_qs = obj.depths.all()
order = {d: i for i, d in enumerate(DEPTHS)}
sorted_depths = sorted(
depth_qs, key=lambda d: order.get(d.depth_label, 99)
)
return SoilDepthDataSerializer(sorted_depths, many=True).data
class SoilDataTaskResponseSerializer(serializers.Serializer):
"""سریالایزر خروجی وقتی تسک در صف قرار گرفته (۲۰۲)."""
source = serializers.CharField(default="task")
task_id = serializers.CharField()
lon = serializers.FloatField(source="longitude")
lat = serializers.FloatField(source="latitude")
2026-03-25 01:56:41 +03:30
status_url = serializers.CharField(required=False)