UPDATE
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user