|
15 | 15 |
|
16 | 16 |
|
17 | 17 | class MetadataSerializer(serializers.ModelSerializer["Metadata"]): |
| 18 | + field_value = serializers.CharField(required=False, allow_blank=True, allow_null=True) |
| 19 | + |
18 | 20 | class Meta: |
19 | 21 | model = apps.get_model("metadata", "Metadata") |
20 | 22 | fields = ("id", "model_field", "field_value") |
21 | 23 |
|
22 | 24 | def validate(self, data: dict[str, typing.Any]) -> dict[str, typing.Any]: |
23 | 25 | data = super().validate(data) |
24 | | - if not data["model_field"].field.is_field_value_valid(data["field_value"]): |
| 26 | + field_value = data.get("field_value") |
| 27 | + if (field_value and not data["model_field"].field.is_field_value_valid(field_value)): |
25 | 28 | raise serializers.ValidationError( |
26 | 29 | f"Invalid value for field {data['model_field'].field.name}" |
27 | 30 | ) |
@@ -74,7 +77,7 @@ def update_metadata( |
74 | 77 |
|
75 | 78 | for metadata_item in metadata_data: |
76 | 79 | metadata_model_field = metadata_item.pop("model_field", None) |
77 | | - if metadata_item.get("delete"): |
| 80 | + if metadata_item.get("delete") or not metadata_item.get("field_value"): |
78 | 81 | Metadata.objects.filter( |
79 | 82 | model_field=metadata_model_field, |
80 | 83 | object_id=instance.pk, |
@@ -113,7 +116,7 @@ def validate_required_metadata( |
113 | 116 | if required_for.pk == requirement.object_id: |
114 | 117 | if not any( |
115 | 118 | [ |
116 | | - field["model_field"] == requirement.model_field |
| 119 | + field["model_field"] == requirement.model_field and field.get("field_value") not in [None, ""] |
117 | 120 | for field in metadata |
118 | 121 | ] |
119 | 122 | ): |
|
0 commit comments