This commit is contained in:
2026-04-24 02:50:27 +03:30
parent 302124aa87
commit a76af4e766
20 changed files with 430 additions and 147 deletions
+29 -3
View File
@@ -1,6 +1,8 @@
from rest_framework import serializers
from location_data.serializers import SoilDepthDataSerializer
from irrigation.models import IrrigationMethod
from irrigation.serializers import IrrigationMethodSerializer
from plant.serializers import PlantSerializer
from weather.models import WeatherForecast
@@ -19,6 +21,11 @@ class SensorDataUpdateSerializer(serializers.Serializer):
required=False,
help_text="لیست شناسه گیاهان مرتبط",
)
irrigation_method_id = serializers.IntegerField(
required=False,
allow_null=True,
help_text="شناسه روش آبیاری مرتبط",
)
def to_internal_value(self, data):
if not isinstance(data, dict):
@@ -31,6 +38,7 @@ class SensorDataUpdateSerializer(serializers.Serializer):
"sensor_key",
"sensor_payload",
"plant_ids",
"irrigation_method_id",
}
flat_metrics = {
key: value
@@ -71,10 +79,21 @@ class SensorDataUpdateSerializer(serializers.Serializer):
)
return value
def validate_irrigation_method_id(self, value):
if value is None:
return value
if not IrrigationMethod.objects.filter(pk=value).exists():
raise serializers.ValidationError("روش آبیاری معتبر نیست.")
return value
def validate(self, attrs):
if "sensor_payload" not in attrs and "plant_ids" not in attrs:
if (
"sensor_payload" not in attrs
and "plant_ids" not in attrs
and "irrigation_method_id" not in attrs
):
raise serializers.ValidationError(
"حداقل یکی از sensor_payload یا plant_ids باید ارسال شود."
"حداقل یکی از sensor_payload یا plant_ids یا irrigation_method_id باید ارسال شود."
)
return attrs
@@ -87,6 +106,11 @@ class SensorDataResponseSerializer(serializers.ModelSerializer):
many=True,
read_only=True,
)
irrigation_method_id = serializers.IntegerField(
source="irrigation_method.id",
read_only=True,
allow_null=True,
)
class Meta:
model = SensorData
@@ -96,6 +120,7 @@ class SensorDataResponseSerializer(serializers.ModelSerializer):
"weather_forecast_id",
"sensor_payload",
"plant_ids",
"irrigation_method_id",
"created_at",
"updated_at",
]
@@ -148,12 +173,13 @@ class FarmSoilPayloadSerializer(serializers.Serializer):
class FarmDetailSerializer(serializers.Serializer):
farm_uuid = serializers.UUIDField()
center_location = FarmCenterLocationSerializer()
weather = WeatherForecastDetailSerializer(allow_null=True)
sensor_payload = serializers.JSONField()
soil = FarmSoilPayloadSerializer()
plant_ids = serializers.ListField(child=serializers.IntegerField())
plants = PlantSerializer(many=True)
irrigation_method_id = serializers.IntegerField(allow_null=True)
irrigation_method = IrrigationMethodSerializer(allow_null=True)
created_at = serializers.DateTimeField()
updated_at = serializers.DateTimeField()