first commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
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")
|
||||
status_url = serializers.URLField(required=False)
|
||||
Reference in New Issue
Block a user