diff --git a/field/models.py b/field/models.py index aee9c55..412271a 100644 --- a/field/models.py +++ b/field/models.py @@ -69,16 +69,16 @@ class Job(models.Model): ("Pruning", "PRUNING"), ("Harvesting", "HARVESTING"), ] - type = models.CharField(max_length=15, choices=TYPE_CHOICES, default="Irrigating") + type = models.CharField(max_length=15, choices=TYPE_CHOICES, default="Irrigation") field = models.ForeignKey(Field, on_delete=models.CASCADE) made_date = models.DateTimeField(auto_now_add=True) date = models.DateField() - status = models.BooleanField() - costs = models.ManyToManyField(Cost, null=True, blank=True) - notes = models.ManyToManyField(Note, null=True, blank=True) + status = models.BooleanField(default=False) + costs = models.ManyToManyField(Cost, blank=True) + notes = models.ManyToManyField(Note, blank=True) ##########REMOVE THIS MF! # voices = models.ForeignKey(Voice, on_delete=models.SET_NULL, null=True, blank=True) - images = models.ManyToManyField(Image, null=True, blank=True) + images = models.ManyToManyField(Image, blank=True) def __str__(self): return self.type diff --git a/field/serializers.py b/field/serializers.py index 38c821b..f9bc43e 100644 --- a/field/serializers.py +++ b/field/serializers.py @@ -35,25 +35,105 @@ class ImageSerializer(serializers.ModelSerializer): class JobSerializer(serializers.ModelSerializer): - # field = serializers.PrimaryKeyRelatedField(queryset=Field.objects.all()) - field = FieldSerializer(read_only=True) - # costs = serializers.PrimaryKeyRelatedField( - # queryset=Cost.objects.all(), required=False, allow_null=True - # ) + field = serializers.PrimaryKeyRelatedField(queryset=Field.objects.all()) + costs = CostSerializer(read_only=True, many=True) - # notes = serializers.PrimaryKeyRelatedField( - # queryset=Note.objects.all(), required=False, many=True - # ) + cost_ids = serializers.PrimaryKeyRelatedField( + queryset=Cost.objects.all(), many=True, write_only=True, required=False + ) + notes = NoteSerializer(read_only=True, many=True) - # images = serializers.PrimaryKeyRelatedField( - # queryset=Image.objects.all(), required=False, many=True - # ) + note_ids = serializers.PrimaryKeyRelatedField( + queryset=Note.objects.all(), many=True, write_only=True, required=False + ) + images = ImageSerializer(read_only=True, many=True) + image_ids = serializers.PrimaryKeyRelatedField( + queryset=Image.objects.all(), many=True, write_only=True, required=False + ) class Meta: model = Job fields = "__all__" + def create(self, validated_data): + print("validated_data:", validated_data) + note_ids = validated_data.pop("note_ids", []) + cost_ids = validated_data.pop("cost_ids", []) + image_ids = validated_data.pop("image_ids", []) + note_ids = [n.id if hasattr(n, "id") else n for n in note_ids] + cost_ids = [c.id if hasattr(c, "id") else c for c in cost_ids] + image_ids = [i.id if hasattr(i, "id") else i for i in image_ids] + + job = Job.objects.create(**validated_data) + + if note_ids: + notes = Note.objects.filter(id__in=note_ids) + job.notes.add(*notes) + + if cost_ids: + costs = Cost.objects.filter(id__in=cost_ids) + job.costs.add(*costs) + + if image_ids: + images = Image.objects.filter(id__in=image_ids) + job.images.add(*images) + + return job + + def update(self, instance, validated_data): + note_ids = validated_data.pop("note_ids", None) + cost_ids = validated_data.pop("cost_ids", None) + image_ids = validated_data.pop("image_ids", None) + + if note_ids is not None: + note_ids = [n.id if hasattr(n, "id") else n for n in note_ids] + + if cost_ids is not None: + cost_ids = [c.id if hasattr(c, "id") else c for c in cost_ids] + + if image_ids is not None: + image_ids = [i.id if hasattr(i, "id") else i for i in image_ids] + + for attr, value in validated_data.items(): + setattr(instance, attr, value) + instance.save() + + if note_ids is not None: + notes = Note.objects.filter(id__in=note_ids) + instance.notes.set(notes) + + if cost_ids is not None: + costs = Cost.objects.filter(id__in=cost_ids) + instance.costs.set(costs) + + if image_ids is not None: + images = Image.objects.filter(id__in=image_ids) + instance.images.set(images) + + return instance + + +# class JobSerializer(serializers.ModelSerializer): +# # field = serializers.PrimaryKeyRelatedField(queryset=Field.objects.all()) +# field = FieldSerializer(read_only=True) +# # costs = serializers.PrimaryKeyRelatedField( +# # queryset=Cost.objects.all(), required=False, allow_null=True +# # ) +# costs = CostSerializer(read_only=True, many=True) +# # notes = serializers.PrimaryKeyRelatedField( +# # queryset=Note.objects.all(), required=False, many=True +# # ) +# notes = NoteSerializer(read_only=True, many=True) +# # images = serializers.PrimaryKeyRelatedField( +# # queryset=Image.objects.all(), required=False, many=True +# # ) +# images = ImageSerializer(read_only=True, many=True) + +# class Meta: +# model = Job +# fields = "__all__" + class CultivationCalenderSerializer(serializers.ModelSerializer): class Meta: diff --git a/media/images/4N1A0354.MOV_snapshot_01.19.441.jpg b/media/images/4N1A0354.MOV_snapshot_01.19.441.jpg new file mode 100644 index 0000000..b02677e Binary files /dev/null and b/media/images/4N1A0354.MOV_snapshot_01.19.441.jpg differ diff --git a/media/images/ChatGPT_Image_May_17_2025_01_45_49_PM.png b/media/images/ChatGPT_Image_May_17_2025_01_45_49_PM.png new file mode 100644 index 0000000..b9ec1ff Binary files /dev/null and b/media/images/ChatGPT_Image_May_17_2025_01_45_49_PM.png differ diff --git a/media/images/d0051fc0-105e-3923-9a4a-70b89dc0c20a.png b/media/images/d0051fc0-105e-3923-9a4a-70b89dc0c20a.png new file mode 100644 index 0000000..a38efa7 Binary files /dev/null and b/media/images/d0051fc0-105e-3923-9a4a-70b89dc0c20a.png differ diff --git a/media/images/hero_camera__bsixees3ujte_xlarge.jpg b/media/images/hero_camera__bsixees3ujte_xlarge.jpg new file mode 100644 index 0000000..06904f5 Binary files /dev/null and b/media/images/hero_camera__bsixees3ujte_xlarge.jpg differ diff --git a/media/images/photo_۲۰۲۵-۰۷-۱۴_۱۰-۳۴-۵۴.jpg b/media/images/photo_۲۰۲۵-۰۷-۱۴_۱۰-۳۴-۵۴.jpg new file mode 100644 index 0000000..f7e611a Binary files /dev/null and b/media/images/photo_۲۰۲۵-۰۷-۱۴_۱۰-۳۴-۵۴.jpg differ